Команды

Безопасная регистрация команд и обработка результата.

В этом разделе

Другие страницы раздела:

Регистрация

Для команд плагина используйте ctx.RegisterCommand(...). Такие команды автоматически снимаются при остановке или перезагрузке плагина.

givegem.go
func NewGiveGemCommand(ctx plugin.Context) command.Command {	return command.New("givegem").		Permission("example.ruby").		Argument("count", command.TypeInt, command.Default(1), command.Min(1), command.Max(64)).		Executor(func(_ context.Context, cmd command.Context) (command.Result, error) {			if cmd.Source.PlayerID == "" {				return command.Result{Messages: []string{"only players can use this command"}}, nil			}			count := cmd.Int("count")			playerHandle, ok := ctx.Gameplay().Players().Get(cmd.Source.PlayerID)			if !ok {				return command.Result{Messages: []string{"player not found"}}, nil			}			_, err := playerHandle.Inventory().Give(item.New("example:ruby").Count(count).Stack())			return command.Result{Messages: []string{"ruby added"}}, err		})}

Типизированные аргументы

Типизированные аргументы приводят игровые значения к нужной форме до запуска executor. Обработчик занимается действием, а не ручным разбором строк.

buff.go
command.New("buff").	Argument("target", command.TypePlayer, command.Default("@s")).	Argument("effect", command.TypeEffect, command.Default("speed")).	Executor(func(_ context.Context, cmd command.Context) (command.Result, error) {		effectType, _ := cmd.Effect("effect")		_ = effectType		return command.Result{Messages: []string{"buff applied"}}, nil	})

Результат выполнения

Обработчики команд должны возвращать command.Result. Сервер сам решает, как доставить ответ источнику команды: игроку, консоли или автоматизации.