Роли игроков для Fabric
Это простая реализация, позволяющая назначать пользовательские разрешения игрокам через «роли», подобные Discord. Роли и их разрешения определяются в файле JSON, который можно легко изменять и перезагружать во время выполнения для быстрой итерации.
Файл roles.json находится в директории config (<root>/config/roles.json
).
everyone
— это роль по умолчанию: каждый игрок будет иметь эту роль, и её нельзя удалить. Другие указанные роли функционируют как переопределения поверх роли everyone
.
Переопределения
В каждом объявлении роли мы перечисляем набор переопределений. Переопределения — это общая система, которую этот мод использует для изменения поведения игры на основе ролей. В настоящее время поддерживаемые типы переопределений: commands
, name_decoration
, chat_type
, mute
, command_feedback
, permission_level
и entity_selectors
.
Важно учитывать, как применяются переопределения, когда несколько ролей нацелены на одни и те же вещи. Подобные конфликты разрешаются путем выбора роли с наивысшим уровнем. Так, в примере: хотя everyone
объявляет все команды, кроме help
, запрещенными, поскольку admin
и spectator
имеют более высокие уровни, они переопределят это поведение.
Команды
Переопределение commands
используется для управления командами, которые игрок может использовать. Каждая запись переопределения задает шаблон регулярного выражения для сопоставления, а затем стратегию, как реагировать, когда мод встречает этот шаблон.
Например, шаблон .*
соответствует каждой возможной команде, а gamemode (spectator|adventure)
будет соответствовать команде gamemode только с режимами spectator и adventure. Стратегии, которые можно использовать вместе с этими шаблонами, — allow
и deny
: allow
обеспечит, что игроку разрешено использовать эту команду, а deny
предотвратит использование команды игроком.
Например:
"commands": {
"gamemode (spectator|adventure)": "allow"
}
Переопределение commands дополнительно может использовать результат правила hidden
, который позволит использовать команду, скрывая её из предложений команд.
Оформление имени
Переопределение name_decoration
изменяет способ отображения имен игроков с ролью. Это можно использовать для переопределения цветов имен, а также для добавления текста перед или после имени. Это имеет более низкий приоритет, чем цвета команд scoreboard.
Оформление имени может быть объявлено следующим образом:
"name_decoration": {
"prefix": {"text": "[Prefix] ", "color": "green"},
"suffix": {"text": "-Suffix"},
"style": ["#ff0000", "bold", "underline"],
"contexts": ["chat", "tab_list"]
}
Три поля могут быть опционально объявлены:
style
: принимает список типов форматирования текста или hex-цветаprefix
: принимает текстовый компонент, который добавляется перед именемsuffix
: принимает текстовый компонент, который добавляется после имениcontexts
: принимает набор возможных контекстов, определяющих, где должно применяться это оформление- Принимает:
chat
иtab_list
- По умолчанию: применяется ко всем возможным контекстам
- Принимает:
Типы чата
Переопределение chat_type
позволяет заменять оформление сообщений чата для всех игроков с ролью. Это интегрируется с ванильным реестром minecraft:chat_type
, который можно изменить с помощью датапака.
Переопределение chat_type
просто объявляет chat_type
, который должен использоваться:
"chat_type": "minecraft:say_command"
Этот пример заменит все сообщения для игроков с данной ролью, применяя стиль say_command
.
Важно отметить, что ванильный реестр типов чата загружается из датапака при запуске сервера и не может быть перезагружен на лету, как конфигурация ролей игроков.
Объявление пользовательских типов чата
Пользовательские типы чата можно объявить с помощью пользовательского датапака в data/<namespace>/chat_type/<name>
.
Например, мы можем объявить data/mydatapack/chat_type/admin.json
:
{
"chat": {
"decoration": {
"parameters": ["sender", "content"],
"style": {},
"translation_key": "%s: %s <- an admin said this!"
}
},
"narration": {
"decoration": {
"parameters": ["sender", "content"],
"style": {},
"translation_key": "chat.type.text.narrate"
},
"priority": "chat"
}
}
На который затем можно ссылаться в переопределении, например:
"chat_type": "mydatapack:admin"
Уровень разрешений
Переопределение permission_level
устанавливает ванильный уровень разрешений для назначенных игроков. Это полезно для взаимодействия с другими модами, а также с ванильными функциями, которые не поддерживаются этим модом.
Уровень разрешений объявляется так:
"permission_level": 4
Заглушение
Переопределение mute
функционирует очень просто, предотвращая ввод сообщений в чат назначенными игроками.
Заглушение объявляется так:
"mute": true
Обратная связь команд
По умолчанию все операторы получают глобальную обратную связь, когда другой игрок выполняет команду. Переопределение command_feedback
позволяет определенным ролям получать такую же обратную связь.
Обратная связь команд объявляется так:
"command_feedback": true
Селекторы сущностей
Обычно только источники команд с уровнем разрешений два или выше могут использовать селекторы сущностей. Переопределение entity_selectors
позволяет определенным ролям использовать селекторы сущностей.
Селекторы сущностей можно разрешить так:
"entity_selectors": true
Другая конфигурация
Роли дополнительно можно применять к командным блокам или исполнителям функций через файл конфигурации. Например:
{
"commands": {
"apply": {
"command_block": true,
"function": true
},
"overrides": {
}
}
}
Также может быть полезно, чтобы роль наследовала переопределения от другой роли. Это можно сделать с помощью объявления includes
, ссылаясь на другие роли с более низким уровнем. Например:
{
"foo": {
"includes": ["bar"],
"overrides": {
"commands": {
".*": "allow"
}
}
},
"bar": {
"overrides": {
"name_decoration": {
"style": "red"
}
}
}
}
С этой конфигурацией роль foo
унаследует красное name_decoration
.
Применение ролей в игре
После внесения изменений в файл roles.json
вы можете перезагрузить его, используя команду /role reload
.
Все управление ролями осуществляется через команду role
с помощью различных подкоманд. Например:
role assign Gegy admin
: назначает рольadmin
игрокуGegy
role remove Gegy admin
: удаляет рольadmin
у игрокаGegy
role list Gegy
: перечисляет все роли, примененные кGegy
role reload
: перезагружает файл конфигурацииroles.json