Files
ShrinkCommand/README.md
T
cneicy 174b9c6976
Publish UPM package / publish (push) Successful in 2s
Publish NuGet packages / publish (push) Successful in 3m37s
feat(command): expose registration snapshots for inspection
2026-09-29 10:14:38 +08:00

98 lines
2.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 -->