From 72792dd2ae92d21a74c0fb6275883cfffa9180d1 Mon Sep 17 00:00:00 2001
From: nike4613 This function will be called whenever attempting to resolve an image URI, to ensure that the image exists in the embedded assembly.MarkdownView()
@@ -413,7 +413,7 @@ public class MarkdownView : MonoBehaviour
Improve this Doc
- View Source
+ View Source
HasEmbeddedImage
Markdown
@@ -481,7 +481,7 @@ public class MarkdownView : MonoBehaviour
Improve this Doc
- View Source
+ View Source
rectTransform
@@ -541,7 +541,7 @@ public class MarkdownView : MonoBehaviour
Improve this Doc
NameAttribute(String)
@@ -288,7 +288,7 @@ public sealed class NameAttribute : Attribute, _Attribute
Improve this Doc
- View Source
+ View Source
Name
@@ -346,7 +346,7 @@ public sealed class NameAttribute : Attribute, _Attribute
Improve this Doc
PreferAttribute(String[])
@@ -289,7 +289,7 @@ public sealed class PreferAttribute : Attribute, _Attribute
Improve this Doc
- View Source
+ View Source
PreferenceOrder
@@ -347,7 +347,7 @@ public sealed class PreferAttribute : Attribute, _Attribute
Improve this Doc
parent
.<
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 183671d4..d3701b0d 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 3f9d516f..a154cee4 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 b2e6f3a6..adbb2722 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 c445653f..d7983390 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 752b476f..afd708df 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 52989386..8ed67d5e 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 138175cb..2e75b61e 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 8eb3e6e1..d8e90056 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 72708bbc..21c5fda2 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 a825f125..ea730a59 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 c57a36aa..2c612255 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 218cfbcb..0693a556 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 1d2bac7d..b04b7802 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 2eab11db..0e90c3c5 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 b6d277df..518aaeb5 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 21776be7..37a41371 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 b54da237..36a22c0f 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 55e33c7f..febfd807 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 9841c666..2b61a28a 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 9abc8774..03ec6d1e 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 002b3e7c..42d0109b 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 ef340e73..2803cf10 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 4ab06927..46265d48 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 7166030e..8e6ed70f 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 da39c608..f15dda9e 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 259e1bd0..613000cc 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 27af1450..b4b72db0 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 2bcb86ab..439a8ff6 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 75e90954..8f05ebc6 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 edd9709f..23b54046 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 47397694..4ebe1d0f 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 1a684ec5..17866a9b 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 67f76db9..018f111c 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 551d52e8..869280fe 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 27d97304..8c953c81 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 33b5d889..6c20ed82 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 d72196cc..b727d1dc 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 58bc2bff..bdece191 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 2b86770b..8ef2b29e 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 3269b2d6..fba4297c 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 c2fb2298..d6261da1 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 2f066e72..7bdc6c44 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 fd151bad..b654bbb2 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 e940ed4d..8637fc7a 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 03d2b94f..5095c7cb 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 5db47252..0203f569 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 04455473..5c1ab155 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 c218ae94..05e70e4d 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 4a1e5efe..376ee4cc 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 c8a5f57e..7839e742 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 4775040a..e2b77d9a 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 4e4e958d..011cab52 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 c97d6434..b36e0966 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 cf6402a2..9f649d9a 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 e4c7c430..3bfd93e3 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 75bfae5c..1acfea18 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 bd6b1215..b6a3e15a 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 4b0b2553..c97c910e 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 f0adc960..34800d54 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 51f16b6b..f494dd73 100644
--- a/index.html
+++ b/index.html
@@ -101,7 +101,7 @@
diff --git a/index.json b/index.json
index 1311e05d..96202673 100644
--- a/index.json
+++ b/index.json
@@ -1,228 +1,113 @@
{
- "api/IPA.Logging.Printers.GlobalLogFilePrinter.html": {
- "href": "api/IPA.Logging.Printers.GlobalLogFilePrinter.html",
- "title": "Class GlobalLogFilePrinter",
- "keywords": "Class GlobalLogFilePrinter A printer for all messages to a unified log location. Inheritance Object LogPrinter GZFilePrinter GlobalLogFilePrinter Implements IDisposable Inherited Members GZFilePrinter.FileWriter GZFilePrinter.StartPrint() GZFilePrinter.EndPrint() GZFilePrinter.Dispose() GZFilePrinter.Dispose(Boolean) Object.ToString() Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : IPA.Logging.Printers Assembly : IPA.Loader.dll Syntax public class GlobalLogFilePrinter : GZFilePrinter, IDisposable Properties | Improve this Doc View Source Filter Provides a filter for this specific printer. Declaration public override Logger.LogLevel Filter { get; set; } Property Value Type Description Logger.LogLevel the filter level for this printer Overrides LogPrinter.Filter Methods | Improve this Doc View Source GetFileInfo() Gets the FileInfo for the target file. Declaration protected override FileInfo GetFileInfo() Returns Type Description FileInfo the target file to write to Overrides GZFilePrinter.GetFileInfo() | Improve this Doc View Source Print(Logger.Level, DateTime, String, String) Prints an entry to the associated file. Declaration public override void Print(Logger.Level level, DateTime time, string logName, string message) Parameters Type Name Description Logger.Level level the Logger.Level of the message DateTime time the DateTime the message was recorded at String logName the name of the log that sent the message String message the message to print Overrides LogPrinter.Print(Logger.Level, DateTime, String, String) 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.Logging.Printers.ColorlessConsolePrinter.html": {
- "href": "api/IPA.Logging.Printers.ColorlessConsolePrinter.html",
- "title": "Class ColorlessConsolePrinter",
- "keywords": "Class ColorlessConsolePrinter A colorless version of ColoredConsolePrinter , that indiscriminantly prints to standard out. Inheritance Object LogPrinter ColorlessConsolePrinter Inherited Members LogPrinter.StartPrint() LogPrinter.EndPrint() Object.ToString() Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : IPA.Logging.Printers Assembly : IPA.Loader.dll Syntax public class ColorlessConsolePrinter : LogPrinter Properties | Improve this Doc View Source Filter A filter for this specific printer. Declaration public override Logger.LogLevel Filter { get; set; } Property Value Type Description Logger.LogLevel the filter level for this printer Overrides LogPrinter.Filter Methods | Improve this Doc View Source Print(Logger.Level, DateTime, String, String) Prints an entry to standard out. Declaration public override void Print(Logger.Level level, DateTime time, string logName, string message) Parameters Type Name Description Logger.Level level the Logger.Level of the message DateTime time the DateTime the message was recorded at String logName the name of the log that sent the message String message the message to print Overrides LogPrinter.Print(Logger.Level, DateTime, String, String) 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.Loader.PluginMetadata.html": {
- "href": "api/IPA.Loader.PluginMetadata.html",
- "title": "Class PluginMetadata",
- "keywords": "Class PluginMetadata A class which describes a loaded plugin. Inheritance Object PluginMetadata Inherited Members Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : IPA.Loader Assembly : IPA.Loader.dll Syntax public class PluginMetadata Properties | Improve this Doc View Source Assembly The assembly the plugin was loaded from. Declaration public Assembly Assembly { get; } Property Value Type Description Assembly the loaded Assembly that contains the plugin main type | Improve this Doc View Source Features The features this plugin requests. Declaration public IReadOnlyList Features { get; } Property Value Type Description IReadOnlyList < Feature > the list of features requested by the plugin | Improve this Doc View Source File The file the plugin was loaded from. Declaration public FileInfo File { get; } Property Value Type Description FileInfo the file the plugin was loaded from | Improve this Doc View Source Id The BeatMods ID of the plugin, or null if it doesn't have one. Declaration public string Id { get; } Property Value Type Description String the updater ID of the plugin | Improve this Doc View Source IsBare Whether or not this metadata object represents a bare manifest. Declaration public bool IsBare { get; } Property Value Type Description Boolean true if it is bare, false otherwise | Improve this Doc View Source Name The human readable name of the plugin. Declaration public string Name { get; } Property Value Type Description String the name of the plugin | Improve this Doc View Source PluginType The TypeDefinition for the main type of the plugin. Declaration public TypeDefinition PluginType { get; } Property Value Type Description TypeDefinition the Cecil definition for the plugin main type | Improve this Doc View Source RuntimeOptions The RuntimeOptions that the plugin specified in its PluginAttribute . Declaration public RuntimeOptions RuntimeOptions { get; } Property Value Type Description RuntimeOptions | Improve this Doc View Source Version The version of the plugin. Declaration public SemVer.Version Version { get; } Property Value Type Description SemVer.Version the version of the plugin Methods | Improve this Doc View Source ToString() Gets all of the metadata as a readable string. Declaration public override string ToString() Returns Type Description String the readable printable metadata string Overrides Object.ToString() 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.Loader.PluginManager.html": {
- "href": "api/IPA.Loader.PluginManager.html",
- "title": "Class PluginManager",
- "keywords": "Class PluginManager The manager class for all plugins. Inheritance Object PluginManager Inherited Members Object.ToString() Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : IPA.Loader Assembly : IPA.Loader.dll Syntax public static class PluginManager Properties | Improve this Doc View Source AllPlugins Gets a list of all enabled BSIPA plugins. Declaration public static IEnumerable AllPlugins { get; } Property Value Type Description IEnumerable < PluginMetadata > a collection of all enabled plugins as PluginMetadata s | Improve this Doc View Source DisabledPlugins Gets a list of disabled BSIPA plugins. Declaration public static IEnumerable DisabledPlugins { get; } Property Value Type Description IEnumerable < PluginMetadata > a collection of all disabled plugins as PluginMetadata | Improve this Doc View Source Plugins An IEnumerable of old IPA plugins. Declaration [Obsolete(\"I mean, IPlugin shouldn't be used, so why should this? Not renaming to extend support for old plugins.\")] public static IEnumerable Plugins { get; } Property Value Type Description IEnumerable < IPlugin > all legacy plugin instances Methods | Improve this Doc View Source GetDisabledPlugin(String) Gets a disabled plugin's metadata by its name. Declaration public static PluginMetadata GetDisabledPlugin(string name) Parameters Type Name Description String name the name of the disabled plugin to get Returns Type Description PluginMetadata the metadata for the corresponding plugin | Improve this Doc View Source GetDisabledPluginFromId(String) Gets a disabled plugin's metadata by its ID. Declaration public static PluginMetadata GetDisabledPluginFromId(string name) Parameters Type Name Description String name the ID of the disabled plugin to get Returns Type Description PluginMetadata the metadata for the corresponding plugin | Improve this Doc View Source GetPlugin(String) Gets info about the enabled plugin with the specified name. Declaration public static PluginMetadata GetPlugin(string name) Parameters Type Name Description String name the name of the plugin to get (must be an exact match) Returns Type Description PluginMetadata the plugin metadata for the requested plugin or null if it doesn't exist or is disabled | Improve this Doc View Source GetPluginFromId(String) Gets info about the enabled plugin with the specified ID. Declaration public static PluginMetadata GetPluginFromId(string name) Parameters Type Name Description String name the ID name of the plugin to get (must be an exact match) Returns Type Description PluginMetadata the plugin metadata for the requested plugin or null if it doesn't exist or is disabled | Improve this Doc View Source IsDisabled(PluginMetadata) Checks if a given plugin is disabled. Declaration public static bool IsDisabled(PluginMetadata meta) Parameters Type Name Description PluginMetadata meta the plugin to check Returns Type Description Boolean true if the plugin is disabled, false otherwise. | Improve this Doc View Source IsEnabled(PluginMetadata) Checks if a given plugin is enabled. Declaration public static bool IsEnabled(PluginMetadata meta) Parameters Type Name Description PluginMetadata meta the plugin to check Returns Type Description Boolean true if the plugin is enabled, false otherwise. | Improve this Doc View Source PluginStateTransaction() Creates a new transaction for mod enabling and disabling mods simultaneously. Declaration public static StateTransitionTransaction PluginStateTransaction() Returns Type Description StateTransitionTransaction a new StateTransitionTransaction that captures the current state of loaded mods Events | Improve this Doc View Source PluginDisabled Called whenever a plugin is disabled. Declaration public static event PluginManager.PluginDisableDelegate PluginDisabled Event Type Type Description PluginManager.PluginDisableDelegate | Improve this Doc View Source PluginEnabled Called whenever a plugin is enabled. Declaration public static event PluginManager.PluginEnableDelegate PluginEnabled Event Type Type Description PluginManager.PluginEnableDelegate"
- },
- "api/IPA.Loader.Features.html": {
- "href": "api/IPA.Loader.Features.html",
- "title": "",
- "keywords": "Classes Feature The root interface for a mod Feature."
- },
- "api/IPA.Loader.Features.Feature.html": {
- "href": "api/IPA.Loader.Features.Feature.html",
- "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.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.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.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(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[])"
+ "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 } } }"
},
- "api/IPA.Config.Stores.Attributes.SerializedNameAttribute.html": {
- "href": "api/IPA.Config.Stores.Attributes.SerializedNameAttribute.html",
- "title": "Class SerializedNameAttribute",
- "keywords": "Class SerializedNameAttribute Specifies a name for the serialized field or property in an object being wrapped by Generated(Config, Boolean) that is different from the member name itself. Inheritance Object Attribute SerializedNameAttribute 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 SerializedNameAttribute : Attribute, _Attribute Examples When serializing the following object, we might get the JSON that follows. public class PluginConfig { public virtual bool BooleanField { get; set; } = true; } { \"BooleanField\": true } However, if we were to add a SerializedNameAttribute to that field, we would get the following. public class PluginConfig { [SerializedName(\"bool\")] public virtual bool BooleanField { get; set; } = true; } { \"bool\": true } Constructors | Improve this Doc View Source SerializedNameAttribute(String) Creates a new SerializedNameAttribute with the given Name . Declaration public SerializedNameAttribute(string name) Parameters Type Name Description String name the value to assign to Name Properties | Improve this Doc View Source Name Gets the name to replace the member name with. Declaration public string Name { get; } Property Value Type Description String 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[])"
+ "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 ."
},
- "api/IPA.Config.Data.Map.html": {
- "href": "api/IPA.Config.Data.Map.html",
- "title": "Class Map",
- "keywords": "Class Map A ordered map of String to Value for serialization by an IConfigProvider . Use Map() or From(IDictionary) to create. Inheritance Object Value Map Implements IDictionary < String , Value > ICollection < KeyValuePair < String , Value >> IEnumerable < KeyValuePair < String , Value >> IEnumerable Inherited Members Value.Null() Value.List() Value.Map() Value.From(String) Value.Text(String) Value.From(Int64) Value.Integer(Int64) Value.From(Decimal) Value.Float(Decimal) Value.From(Boolean) Value.Bool(Boolean) Value.From(IEnumerable) Value.From(IDictionary) Value.From(IEnumerable>) Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : IPA.Config.Data Assembly : IPA.Loader.dll Syntax public sealed class Map : Value, IDictionary, ICollection>, IEnumerable>, IEnumerable Properties | Improve this Doc View Source Count Gets the number of key-value pairs in this Map . Declaration public int Count { get; } Property Value Type Description Int32 See Also Count | Improve this Doc View Source Item[String] Accesses the Value at key in the map. Declaration public Value this[string key] { get; set; } Parameters Type Name Description String key the key to get the value associated with Property Value Type Description Value the value associated with the key See Also Item [TKey] | Improve this Doc View Source Keys Gets a collection of the keys for the Map . Declaration public ICollection Keys { get; } Property Value Type Description ICollection < String > See Also Keys | Improve this Doc View Source Values Gets a collection of the values in the Map . Declaration public ICollection Values { get; } Property Value Type Description ICollection < Value > Remarks Unlike all other iterables given by Map , this does not guarantee that order is maintained. See Also Values Methods | Improve this Doc View Source Add(String, Value) Adds a new Value with a given key. Declaration public void Add(string key, Value value) Parameters Type Name Description String key the key to put the value at Value value the Value to add See Also Add (TKey, TValue) | Improve this Doc View Source Clear() Clears the Map of its key-value pairs. Declaration public void Clear() See Also Clear () | Improve this Doc View Source ContainsKey(String) Checks if the Map contains a given key . Declaration public bool ContainsKey(string key) Parameters Type Name Description String key the key to check for Returns Type Description Boolean true if the key exists, otherwise false See Also ContainsKey (TKey) | Improve this Doc View Source GetEnumerator() Enumerates the Map 's key-value pairs. Declaration public IEnumerator> GetEnumerator() Returns Type Description IEnumerator < KeyValuePair < String , Value >> an IEnumerator of key-value pairs in this Map See Also GetEnumerator () | Improve this Doc View Source Remove(String) Removes the object associated with a key in this Map . Declaration public bool Remove(string key) Parameters Type Name Description String key the key to remove Returns Type Description Boolean true if the key existed, false otherwise See Also Remove (TKey) | Improve this Doc View Source ToString() Converts this Value into a human-readable format. Declaration public override string ToString() Returns Type Description String a JSON-like set of key-value pairs Overrides Value.ToString() | Improve this Doc View Source TryGetValue(String, out Value) Gets the value associated with the specified key. Declaration public bool TryGetValue(string key, out Value value) Parameters Type Name Description String key the key of the value to get Value value the target location of the retrieved object Returns Type Description Boolean true if the key was found and value set, false otherwise See Also TryGetValue (TKey, TValue) Explicit Interface Implementations | Improve this Doc View Source ICollection>.Add(KeyValuePair) Declaration void ICollection>.Add(KeyValuePair item) Parameters Type Name Description KeyValuePair < String , Value > item | Improve this Doc View Source ICollection>.Contains(KeyValuePair) Declaration bool ICollection>.Contains(KeyValuePair item) Parameters Type Name Description KeyValuePair < String , Value > item Returns Type Description Boolean | Improve this Doc View Source ICollection>.CopyTo(KeyValuePair[], Int32) Declaration void ICollection>.CopyTo(KeyValuePair[] array, int arrayIndex) Parameters Type Name Description KeyValuePair < String , Value >[] array Int32 arrayIndex | Improve this Doc View Source ICollection>.IsReadOnly Declaration bool ICollection>.IsReadOnly { get; } Returns Type Description Boolean | Improve this Doc View Source ICollection>.Remove(KeyValuePair) Declaration bool ICollection>.Remove(KeyValuePair item) Parameters Type Name Description KeyValuePair < String , Value > item Returns Type Description Boolean | Improve this Doc View Source IEnumerable.GetEnumerator() Declaration IEnumerator IEnumerable.GetEnumerator() Returns Type Description IEnumerator Implements System.Collections.Generic.IDictionary System.Collections.Generic.ICollection System.Collections.Generic.IEnumerable System.Collections.IEnumerable Extension Methods EnumerableExtensions.Prepend(IEnumerable, T) EnumerableExtensions.Append(IEnumerable, T) EnumerableExtensions.NonNull(IEnumerable, Func) ReflectionUtil.SetField(T, String, U) ReflectionUtil.GetField(T, String) ReflectionUtil.SetProperty(T, String, U) ReflectionUtil.GetProperty(T, String) ReflectionUtil.InvokeMethod(T, String, Object[])"
+ "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/ ."
},
- "api/IPA.Config.Data.Integer.html": {
- "href": "api/IPA.Config.Data.Integer.html",
- "title": "Class Integer",
- "keywords": "Class Integer A Value representing an integer. This may hold a Int64 's worth of data. Inheritance Object Value Integer Inherited Members Value.Null() Value.List() Value.Map() Value.From(String) Value.Text(String) Value.From(Int64) Value.Integer(Int64) Value.From(Decimal) Value.Float(Decimal) Value.From(Boolean) Value.Bool(Boolean) Value.From(IEnumerable) Value.From(IDictionary) Value.From(IEnumerable>) Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : IPA.Config.Data Assembly : IPA.Loader.dll Syntax public sealed class Integer : Value Properties | Improve this Doc View Source Value The actual value of the Integer object. Declaration public long Value { get; set; } Property Value Type Description Int64 Methods | Improve this Doc View Source AsFloat() Coerces this Integer into a FloatingPoint . Declaration public FloatingPoint AsFloat() Returns Type Description FloatingPoint a FloatingPoint representing the closest approximation of Value | Improve this Doc View Source ToString() Converts this Value into a human-readable format. Declaration public override string ToString() Returns Type Description String the result of Value.ToString() Overrides Value.ToString() 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[])"
+ "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 ."
},
- "api/IPA.Config.Data.Boolean.html": {
- "href": "api/IPA.Config.Data.Boolean.html",
- "title": "Class Boolean",
- "keywords": "Class Boolean A Value representing a boolean value. Inheritance Object Value Boolean Inherited Members Value.Null() Value.List() Value.Map() Value.From(String) Value.Text(String) Value.From(Int64) Value.Integer(Int64) Value.From(Decimal) Value.Float(Decimal) Value.From(Boolean) Value.Bool(Boolean) Value.From(IEnumerable) Value.From(IDictionary) Value.From(IEnumerable>) Object.Equals(Object) Object.Equals(Object, Object) Object.ReferenceEquals(Object, Object) Object.GetHashCode() Object.GetType() Object.MemberwiseClone() Namespace : IPA.Config.Data Assembly : IPA.Loader.dll Syntax public sealed class Boolean : Value Properties | Improve this Doc View Source Value The actual value fo this Boolean object. Declaration public bool Value { get; set; } Property Value Type Description Boolean Methods | Improve this Doc View Source ToString() Converts this Value into a human-readable format. Declaration public override string ToString() Returns Type Description String the result of Value.ToString().ToLower() Overrides Value.ToString() 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[])"
+ "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/IPA.Config.Config.html": {
- "href": "api/IPA.Config.Config.html",
- "title": "Class Config",
- "keywords": "Class Config An abstraction of a config file on disk, which handles synchronizing between a memory representation and the disk representation. Inheritance Object Config 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 public class Config Properties | Improve this Doc View Source Name Gets the name associated with this Config object. Declaration public string Name { get; } Property Value Type Description String | Improve this Doc View Source Provider Gets the IConfigProvider associated with this Config object. Declaration public IConfigProvider Provider { get; } Property Value Type Description IConfigProvider Methods | Improve this Doc View Source GetConfigFor(String, String[]) Gets a Config object using the specified list of preferred config types. Declaration public static Config GetConfigFor(string configName, params string[] extensions) Parameters Type Name Description String configName the name of the mod for this config String [] extensions the preferred config types to try to get Returns Type Description Config a Config using the requested format, or of type JSON. | Improve this Doc View Source LoadAsync() Forces an asynchronous load from disk. Declaration public Task LoadAsync() Returns Type Description Task | Improve this Doc View Source LoadSync() Forces a synchronous load from disk. Declaration public void LoadSync() | Improve this Doc View Source Register(Type) Registers a IConfigProvider to use for configs. Declaration public static void Register(Type type) Parameters Type Name Description Type type the type to register | Improve this Doc View Source Register() Registers a IConfigProvider to use for configs. Declaration public static void Register() where T : IConfigProvider Type Parameters Name Description T the type to register | Improve this Doc View Source SetStore(IConfigStore) Sets this object's IConfigStore . Can only be called once. Declaration public void SetStore(IConfigStore store) Parameters Type Name Description IConfigStore store the IConfigStore to add to this instance Exceptions Type Condition InvalidOperationException If this was called before. 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[]) GeneratedStore.Generated(Config, Boolean)"
+ "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."
},
- "api/BSIPA_ModList.UI.ViewControllers.html": {
- "href": "api/BSIPA_ModList.UI.ViewControllers.html",
- "title": "",
- "keywords": "Classes MarkdownView A UI component that renders CommonMark Markdown in-game."
+ "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\" ] }"
},
- "api/IPA.html": {
- "href": "api/IPA.html",
+ "other_api/index.html": {
+ "href": "other_api/index.html",
"title": "",
- "keywords": "Classes InitAttribute Marks a method or a constructor as an inialization method. OnDisableAttribute Indicates that the target method should be called when the plugin is disabled. OnEnableAttribute Indicates that the target method should be called when the plugin is enabled. OnExitAttribute Indicates that the target method should be called when the game exits. OnStartAttribute Indicates that the target method should be called when the game starts. PluginAttribute Marks a class as being a BSIPA plugin. Enums RuntimeOptions Options that a plugin must specify to describe how it expects to be run."
- },
- "api/IPA.Utilities.UnityGame.Release.html": {
- "href": "api/IPA.Utilities.UnityGame.Release.html",
- "title": "Enum UnityGame.Release",
- "keywords": "Enum UnityGame.Release The different types of releases of the game. Namespace : IPA.Utilities Assembly : IPA.Loader.dll Syntax public enum Release Fields Name Description Other Indicates a non-Steam release. Steam Indicates a Steam release. Extension Methods ReflectionUtil.SetField(String, U) ReflectionUtil.GetField(String) ReflectionUtil.SetProperty(String, U) ReflectionUtil.GetProperty(String) ReflectionUtil.InvokeMethod(String, Object[])"
- },
- "api/IPA.Utilities.ReflectionUtil.html": {
- "href": "api/IPA.Utilities.ReflectionUtil.html",
- "title": "Class ReflectionUtil",
- "keywords": "Class ReflectionUtil A utility class providing reflection helper methods. Inheritance Object ReflectionUtil 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 ReflectionUtil Methods | Improve this Doc View Source CopyComponent(Component, Type, GameObject, Type) Copies a component original to a component of overridingType on the destination UnityEngine.GameObject . Declaration public static Component CopyComponent(this Component original, Type overridingType, GameObject destination, Type originalTypeOverride = null) Parameters Type Name Description UnityEngine.Component original the original component Type overridingType the new component's type UnityEngine.GameObject destination the destination GameObject Type originalTypeOverride overrides the source component type (for example, to a superclass) Returns Type Description UnityEngine.Component the copied component | Improve this Doc View Source CopyComponent(Component, GameObject, Type) A generic version of CopyComponent(Component, Type, GameObject, Type) . Declaration public static T CopyComponent(this Component original, GameObject destination, Type originalTypeOverride = null) where T : Component Parameters Type Name Description UnityEngine.Component original the original component UnityEngine.GameObject destination the destination game object Type originalTypeOverride overrides the source component type (for example, to a superclass) Returns Type Description T the copied component Type Parameters Name Description T the overriding type See Also CopyComponent(Component, Type, GameObject, Type) | Improve this Doc View Source GetField(T, String) Gets the value of a field. Declaration public static U GetField(this T obj, string fieldName) Parameters Type Name Description T obj the object instance to pull from String fieldName the name of the field to read Returns Type Description U the value of the field Type Parameters Name Description U the type of the field (result casted) T the type to get the field from Exceptions Type Condition MissingFieldException if fieldName does not exist on T See Also Get(ref T, String) | Improve this Doc View Source GetProperty(T, String) Gets a property on the target object, as gotten from T . Declaration public static U GetProperty(this T obj, string propertyName) Parameters Type Name Description T obj the object instance String propertyName the property to get Returns Type Description U the value of the property Type Parameters Name Description U the type of the property to get T the type to get the property from Exceptions Type Condition MissingMemberException if propertyName does not exist on T See Also Get(ref T, String) | Improve this Doc View Source InvokeMethod(T, String, Object[]) Invokes a method from T on an object. Declaration public static U InvokeMethod(this T obj, string methodName, params object[] args) Parameters Type Name Description T obj the object instance String methodName the method's name Object [] args the method arguments Returns Type Description U the return value Type Parameters Name Description U the type of the property to get T the type to search for the method on Exceptions Type Condition MissingMethodException if methodName does not exist on T | Improve this Doc View Source SetField(T, String, U) Sets a field on the target object, as gotten from T . Declaration public static void SetField(this T obj, string fieldName, U value) Parameters Type Name Description T obj the object instance String fieldName the field to set U value the value to set it to Type Parameters Name Description T the type to get the field from U the type of the field to set Exceptions Type Condition MissingFieldException if fieldName does not exist on T See Also Set(ref T, String, U) | Improve this Doc View Source SetProperty(T, String, U) Sets a property on the target object, as gotten from T . Declaration public static void SetProperty(this T obj, string propertyName, U value) Parameters Type Name Description T obj the object instance String propertyName the property to set U value the value to set it to Type Parameters Name Description T the type to get the property from U the type of the property to set Exceptions Type Condition MissingMemberException if propertyName does not exist on T See Also Set(ref T, String, U)"
- },
- "api/IPA.Utilities.Ref.html": {
- "href": "api/IPA.Utilities.Ref.html",
- "title": "Class Ref",
- "keywords": "Class Ref Utilities to create Ref using type inference. Inheritance Object Ref 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 Ref Methods | Improve this Doc View Source Create(T) Creates a Ref . Declaration public static Ref Create(T val) Parameters Type Name Description T val the default value. Returns Type Description Ref the new Ref . Type Parameters Name Description T the type to reference."
- },
- "api/IPA.Utilities.Ref-1.html": {
- "href": "api/IPA.Utilities.Ref-1.html",
- "title": "Class Ref",
- "keywords": "Class Ref A class to store a reference for passing to methods which cannot take ref parameters. Inheritance Object Ref Implements IComparable