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

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

  • 运行时创建的对象
  • 模组实例
  • 需要带状态的命令宿主
S
Description
ShrinkSDK Unity UPM package.
Readme
70 KiB
Languages
C# 100%