Compare commits
3
Commits
21fe2695b5
..
v2.1.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2f434fbdfa | ||
|
|
f57a16f5cc | ||
|
|
a2ea0c4174 |
@@ -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
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"authors": [
|
||||
"anth64"
|
||||
],
|
||||
"version": "2.0.0",
|
||||
"version": "2.1.0",
|
||||
"side": "Server",
|
||||
"dependencies": {
|
||||
"game": "1.22.3"
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user