Роли игроков для 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игрокуGegyrole remove Gegy admin: удаляет рольadminу игрокаGegyrole list Gegy: перечисляет все роли, примененные кGegyrole reload: перезагружает файл конфигурацииroles.json

