98 lines
2.8 KiB
Markdown
98 lines
2.8 KiB
Markdown
# ShrinkCommand
|
||
|
||
独立于 `ShrinkNetwork` 的命令系统,目标是提供类似 Minecraft/Brigadier 风格的命令路径、权限、帮助输出和属性式自动注册。
|
||
|
||
Godot 和普通 .NET 项目安装 `ShrinkSDK.Command`;可打包源码位于 `DotNet~`,属性式自动注册由 `ShrinkSDK.CodeGen` 在构建时织入。
|
||
|
||
当前版本已把**静态命令发现**切到编译期注册表:运行时默认服务不再通过 `AppDomain.GetAssemblies() + GetTypes()` 全域扫描静态命令类型,而是直接消费编译期注入的清单。实例命令注册路径保持不变,仍适合模组实例和运行时对象。
|
||
|
||
## 特性
|
||
|
||
- 路径式命令定义:`whitelist add <player>`、`say <message...>`
|
||
- 支持字面量段和贪婪参数段
|
||
- 内建 `help` / `?`
|
||
- 支持命令来源限制:控制台专用 / 非控制台专用 / 任意来源
|
||
- 支持权限校验
|
||
- 支持属性式自动注册,也支持手工注册
|
||
- 可在 Unity 和纯 .NET 宿主中复用
|
||
|
||
## 快速开始
|
||
|
||
```csharp
|
||
using ShrinkCommand;
|
||
|
||
[ShrinkCommandSubscriber]
|
||
public static class DemoCommands
|
||
{
|
||
[ShrinkCommand("say <message...>", 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<string>`
|
||
- `UniTask<ShrinkCommandExecutionResult>`
|
||
- `Task`
|
||
- `Task<string>`
|
||
- `Task<ShrinkCommandExecutionResult>`
|
||
|
||
## 内建命令
|
||
|
||
- `help`
|
||
- `help <path...>`
|
||
- `?`
|
||
- `? <path...>`
|
||
|
||
## 自动注册说明
|
||
|
||
### 静态命令
|
||
|
||
默认运行时会直接读取编译期生成的 `ShrinkCommandGeneratedRegistry`,注册所有静态 `[ShrinkCommandSubscriber]` + `[ShrinkCommand]`。
|
||
|
||
### 实例命令
|
||
|
||
```csharp
|
||
service.RegisterCommands(myCommandInstance);
|
||
```
|
||
|
||
实例注册仍然会扫描对象本身的方法签名,不依赖编译期清单,适合:
|
||
|
||
- 运行时创建的对象
|
||
- 模组实例
|
||
- 需要带状态的命令宿主
|
||
|
||
## 可复用能力
|
||
|
||
<!-- shrink:capabilities -->
|
||
Capability: 路径式命令解析、参数转换、来源权限和帮助输出
|
||
Aliases: 命令 控制台 控制 指令 权限 command
|
||
Limits: 不替代游戏行为实现;从网络调用仍需检查命令来源与权限;注册与执行归宿主协调
|
||
Extension: ShrinkCommandRegistration;RegisterConverter;ShrinkCommandAttribute
|
||
Evidence: [ShrinkCommandService](Runtime/Core/ShrinkCommandService.cs); [ShrinkCommandRegistration](Runtime/Core/ShrinkCommandService.cs)
|
||
<!-- /shrink:capabilities -->
|