refactor(api)make Register/Unregister static, hide Instance

This commit is contained in:
2026-06-28 15:33:58 +02:00
parent a2ea0c4174
commit f57a16f5cc
2 changed files with 15 additions and 6 deletions
+14 -5
View File
@@ -23,7 +23,7 @@ namespace CommandHook;
/// </remarks> /// </remarks>
public class CommandHookModSystem : ModSystem public class CommandHookModSystem : ModSystem
{ {
public static CommandHookModSystem? Instance; internal static CommandHookModSystem? Instance;
private readonly List<ICommandHookListener> listeners = new(); private readonly List<ICommandHookListener> listeners = new();
@@ -54,6 +54,7 @@ public class CommandHookModSystem : ModSystem
/// <summary> /// <summary>
/// Registers a listener for the commands it returns from <see cref="ICommandHookListener.Commands"/>. /// 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> /// </summary>
/// <remarks> /// <remarks>
/// Calling this again for a <see cref="ICommandHookListener.ModId"/> that is already /// 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. /// list, this just calls <see cref="Unregister"/> instead.
/// </remarks> /// </remarks>
/// <param name="listener">The listener to register or update.</param> /// <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; var commands = listener.Commands;
if (commands == null || commands.Count == 0) if (commands == null || commands.Count == 0)
@@ -73,6 +77,7 @@ public class CommandHookModSystem : ModSystem
return; return;
} }
var listeners = Instance.listeners;
int index = listeners.FindIndex(l => l.ModId == listener.ModId); int index = listeners.FindIndex(l => l.ModId == listener.ModId);
bool changed = false; bool changed = false;
@@ -88,7 +93,7 @@ public class CommandHookModSystem : ModSystem
} }
if (changed) if (changed)
Rebuild(); Instance.Rebuild();
} }
/// <summary> /// <summary>
@@ -96,15 +101,19 @@ public class CommandHookModSystem : ModSystem
/// that was never registered, this is a no-op in that case. /// that was never registered, this is a no-op in that case.
/// </summary> /// </summary>
/// <param name="listener">The listener to remove, matched by <see cref="ICommandHookListener.ModId"/>.</param> /// <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); int index = listeners.FindIndex(l => l.ModId == listener.ModId);
if (index < 0) if (index < 0)
return; return;
listeners.RemoveAt(index); listeners.RemoveAt(index);
Rebuild(); Instance.Rebuild();
} }
// Rebuilds the dispatch table from listeners. Runs unconditionally and // Rebuilds the dispatch table from listeners. Runs unconditionally and
+1 -1
View File
@@ -6,7 +6,7 @@
"authors": [ "authors": [
"anth64" "anth64"
], ],
"version": "2.0.0", "version": "2.1.0",
"side": "Server", "side": "Server",
"dependencies": { "dependencies": {
"game": "1.22.3" "game": "1.22.3"