Files
Workspace/Assets/Modules/ShrinkCommand
cneicy d74c2f08ca feat(packages): 内置 SDK 包并完善 ContextLoader 集成
- 将 ShrinkEventBus、ShrinkDataSaver 及其 EventBus 集成从 gitlink 转为仓库直接维护的完整 UPM 包,补齐运行时、编辑器工具、测试与文档
- 新增 Command 和 Network 的 App 集成组件,支持 ContextLoader 服务发布、可逆注销及 Network Loopback 生命周期管理
- 更新 Starter 与演示组合逻辑,缺失模块时可注册、已有兼容安装器时可覆盖,并补充宿主启动断言
- 升级内部包依赖与 Shared CodeGen 包定义,放宽 Integration.App 包的 Git 忽略规则
- 将独立服务器生成器改为基于已编译程序集的语义扫描,支持 partial、复杂泛型、命名冲突检测及模板 SHA-256 覆写保护
- 新增 Network 语义扫描、模板保护和 App 组件生命周期测试
- 新增真实 UPM 消费工程验证脚本,校验内部版本一致性、程序集加载及 EditMode 测试
- 重构当前架构文档并归档已完成的 Cordis 迁移与旧代码地图
2026-08-18 18:06:34 +08:00
..

ShrinkCommand

独立于 ShrinkNetwork 的命令系统,目标是提供类似 Minecraft/Brigadier 风格的命令路径、权限、帮助输出和属性式自动注册。

当前版本已把静态命令发现切到编译期注册表:运行时默认服务不再通过 AppDomain.GetAssemblies() + GetTypes() 全域扫描静态命令类型,而是直接消费编译期注入的清单。实例命令注册路径保持不变,仍适合模组实例和运行时对象。

特性

  • 路径式命令定义:whitelist add <player>say <message...>
  • 支持字面量段和贪婪参数段
  • 内建 help / ?
  • 支持命令来源限制:控制台专用 / 非控制台专用 / 任意来源
  • 支持权限校验
  • 支持属性式自动注册,也支持手工注册
  • 可在 Unity 和纯 .NET 宿主中复用

快速开始

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();

手工执行:

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]

实例命令

service.RegisterCommands(myCommandInstance);

实例注册仍然会扫描对象本身的方法签名,不依赖编译期清单,适合:

  • 运行时创建的对象
  • 模组实例
  • 需要带状态的命令宿主