# ShrinkCommand 独立于 `ShrinkNetwork` 的命令系统,目标是提供类似 Minecraft/Brigadier 风格的命令路径、权限、帮助输出和属性式自动注册。 Godot 和普通 .NET 项目安装 `ShrinkSDK.Command`;可打包源码位于 `DotNet~`,属性式自动注册由 `ShrinkSDK.CodeGen` 在构建时织入。 当前版本已把**静态命令发现**切到编译期注册表:运行时默认服务不再通过 `AppDomain.GetAssemblies() + GetTypes()` 全域扫描静态命令类型,而是直接消费编译期注入的清单。实例命令注册路径保持不变,仍适合模组实例和运行时对象。 ## 特性 - 路径式命令定义:`whitelist add `、`say ` - 支持字面量段和贪婪参数段 - 内建 `help` / `?` - 支持命令来源限制:控制台专用 / 非控制台专用 / 任意来源 - 支持权限校验 - 支持属性式自动注册,也支持手工注册 - 可在 Unity 和纯 .NET 宿主中复用 ## 快速开始 ```csharp using ShrinkCommand; [ShrinkCommandSubscriber] public static class DemoCommands { [ShrinkCommand("say ", Description = "广播一段文本")] private static string Say(string message) { return "[say] " + message; } } var service = new ShrinkCommandService(); service.AutoRegisterAll(); ``` 手工执行: ```csharp var result = await service.ExecuteAsync(source, "say hello world"); ``` ## 方法签名 支持的参数: - `ShrinkCommandContext` - `IShrinkCommandSource` 或其派生类型 - 路径中声明的普通参数,按顺序绑定到方法参数 支持的返回类型: - `void` - `string` - `ShrinkCommandExecutionResult` - `UniTask` - `UniTask` - `UniTask` - `Task` - `Task` - `Task` ## 内建命令 - `help` - `help ` - `?` - `? ` ## 自动注册说明 ### 静态命令 默认运行时会直接读取编译期生成的 `ShrinkCommandGeneratedRegistry`,注册所有静态 `[ShrinkCommandSubscriber]` + `[ShrinkCommand]`。 ### 实例命令 ```csharp service.RegisterCommands(myCommandInstance); ``` 实例注册仍然会扫描对象本身的方法签名,不依赖编译期清单,适合: - 运行时创建的对象 - 模组实例 - 需要带状态的命令宿主