Перейти к содержимому

Команды сервера

Меняется. Следите: #285, #667

На этой странице перечислены команды, которые сервер регистрирует сегодня, уровень прав для каждой и спецификация, где описано ее поведение. Корневых команд у сервера 20, а вместе с алиасом tp получается 21 имя. Большую часть регистрирует VanillaCommandsPlugin из crates/mcrs_minecraft_command_vanilla, остальные - WorldCommandsPlugin из crates/mcrs_minecraft_command_world. Список проверен по обоим файлам plugin.rs и по вызовам проверки прав у каждой команды на коммите 51d45c26a. Если команда есть в ванили, но ее нет в списке, значит, здесь ее пока нет. Например, setblock, give, say и stop не зарегистрированы.

Каждой команде нужен уровень прав. Уровней пять, и они упорядочены так же, как в ванили. Их задает правило PERM-LEVEL-001 спецификации command-permissions.

Id Название
0 all
1 moderators
2 gamemasters
3 admins
4 owners

У игрока без прав оператора уровень all. У оператора тот уровень, который указан в ops.json, от 0 до 4, а команда op выдает уровень по умолчанию, то есть owners. Игрок, который заходит с той же машины, где работает сервер, становится оператором на время сессии. Каждой команде из следующей таблицы нужен уровень 2 или 3, поэтому запускать их могут только операторы.

В колонке “Плагин” vanilla означает VanillaCommandsPlugin, а world - WorldCommandsPlugin. В последней колонке стоит ссылка на спецификацию команды в docs/spec/. Если там написано “нет”, спецификации для этой команды пока нет.

Команда Уровень Плагин Спецификация
execute gamemasters (2) vanilla command-execute.md
gamemode gamemasters (2) vanilla command-gamemode.md
teleport, алиас tp gamemasters (2) vanilla command-teleport.md
locate gamemasters (2) vanilla, cargo feature locate, включена по умолчанию command-locate.md
summon gamemasters (2) vanilla нет
kill gamemasters (2) vanilla command-kill.md
damage gamemasters (2) vanilla command-damage.md
data gamemasters (2) vanilla нет
time gamemasters (2) vanilla command-time.md
ban, pardon, banlist admins (3) vanilla bans.md
op, deop admins (3) vanilla нет (см. PERM-LEVEL-002 в command-permissions.md)
whitelist (list, on, off, reload, add, remove) admins (3) vanilla whitelist.md
fill gamemasters (2) world command-fill.md
forceload gamemasters (2) world command-forceload.md
gamerule gamemasters (2) world command-gamerule.md
weather gamemasters (2) world command-weather.md
tick (включая tick sprint stop) admins (3) world command-tick.md

Общее для всех команд описано еще в трех группах спецификаций. Разбор описан в command-parser.md, типы аргументов - в файлах argument-*.md, а дерево команд, которое сервер отправляет клиенту, - в commands-packet.md. Как команда находит игроков во всех измерениях, объясняет заметка docs/command-dimensions.md.

Игрок вводит команды в чате. Сервер также читает свой стандартный ввод, и каждая строка выполняется в верхнем мире (overworld) как команда, источник которой - сам сервер. Если строк пришло много сразу, сервер растягивает их на несколько тиков и выполняет не больше 2000 строк за тик. Ответы попадают в лог сервера. Код находится в ConsolePlugin из crates/mcrs_minecraft_console.

Команда - это обычный код Bevy-плагина. Плагин вызывает add_command с функцией сборки и функцией выполнения, а образец есть в обоих файлах plugin.rs. Команда может записывать эффекты, которые применяют другие системы, и еще команды порождают событие CommandEvent, которое можно отменить. Плагин нужно скомпилировать в сервер, потому что загрузчика для других плагинов нет и решения о нем пока тоже нет. Подробности есть на странице Команды для плагинов.

  1. Частично#285 Отслеживает дерево команд с уровнями прав и пакет команд. ↩

  2. В работе#667 Отслеживает диалекты команд и пакет команд Bedrock. ↩

Источники и проверка

Проверено: 26.4-snapshot-7, 51d45c26a, 2026-11-09

Переведено с версии 51d45c26a

Следить: #285, #667