3 Commits
3 changed files with 19 additions and 10 deletions
+13 -4
View File
@@ -54,6 +54,7 @@ public class CommandHookModSystem : ModSystem
/// <summary>
/// Registers a listener for the commands it returns from <see cref="ICommandHookListener.Commands"/>.
/// No-ops silently if CommandHook hasn't finished server-side startup yet.
/// </summary>
/// <remarks>
/// Calling this again for a <see cref="ICommandHookListener.ModId"/> that is already
@@ -63,8 +64,11 @@ public class CommandHookModSystem : ModSystem
/// list, this just calls <see cref="Unregister"/> instead.
/// </remarks>
/// <param name="listener">The listener to register or update.</param>
public void Register(ICommandHookListener listener)
public static void Register(ICommandHookListener listener)
{
if (Instance == null)
return;
var commands = listener.Commands;
if (commands == null || commands.Count == 0)
@@ -73,6 +77,7 @@ public class CommandHookModSystem : ModSystem
return;
}
var listeners = Instance.listeners;
int index = listeners.FindIndex(l => l.ModId == listener.ModId);
bool changed = false;
@@ -88,7 +93,7 @@ public class CommandHookModSystem : ModSystem
}
if (changed)
Rebuild();
Instance.Rebuild();
}
/// <summary>
@@ -96,15 +101,19 @@ public class CommandHookModSystem : ModSystem
/// that was never registered, this is a no-op in that case.
/// </summary>
/// <param name="listener">The listener to remove, matched by <see cref="ICommandHookListener.ModId"/>.</param>
public void Unregister(ICommandHookListener listener)
public static void Unregister(ICommandHookListener listener)
{
if (Instance == null)
return;
var listeners = Instance.listeners;
int index = listeners.FindIndex(l => l.ModId == listener.ModId);
if (index < 0)
return;
listeners.RemoveAt(index);
Rebuild();
Instance.Rebuild();
}
// Rebuilds the dispatch table from listeners. Runs unconditionally and
+1 -1
View File
@@ -6,7 +6,7 @@
"authors": [
"anth64"
],
"version": "2.0.0",
"version": "2.1.0",
"side": "Server",
"dependencies": {
"game": "1.22.3"
+5 -5
View File
@@ -39,7 +39,7 @@ Add it as a dependency in your `modinfo.json`:
```json
"dependencies": {
"game": "1.22.3",
"commandhook": "2.0.0"
"commandhook": "2.1.0"
}
```
@@ -116,16 +116,16 @@ Register it once your mod starts, unregister it on dispose:
```csharp
public override void StartServerSide(ICoreServerAPI api)
{
// CommandHookModSystem.Instance is null if CommandHook isn't loaded,
// hence the ?. Register your listener once, here.
CommandHookModSystem.Instance?.Register(myListener);
// Register your listener once, here. No-ops silently if CommandHook
// isn't loaded.
CommandHookModSystem.Register(myListener);
}
public override void Dispose()
{
// Always unregister on dispose, otherwise a stale listener stays in
// the dispatch table after your mod is gone.
CommandHookModSystem.Instance?.Unregister(myListener);
CommandHookModSystem.Unregister(myListener);
}
```