
Cobblemon Trainer Battle Commands
Мод для управления тренерами и начала битв в Cobblemon. Предоставляет команды для создания кастомных сражений между игроками и NPC-тренерами. Идеально подходит для картоделов и разработчиков модпаков.
Cobblemon Trainer Battle Commands (TBCS)
Cobblemon Trainer Battle Commands (сокращённо TBCS) - это серверный мод для Minecraft, который добавляет мощные команды для управления тренерами и организации битв покемонов из мода Cobblemon. Если вы создаёте приключенческие карты или сборки модов с упором на покемонов, этот мод станет незаменимым инструментом. Он позволяет привязывать тренеров к любым сущностям (например, к NPC из Easy NPC), задавать формат битвы, правила использования предметов и даже цепочки сражений с разными наградами.
Мод в первую очередь рассчитан на картоделов и разработчиков модпаков.
Команды
tbcsattach <trainerId> <entity>- привязывает указанного тренера к заданной сущности (тренер может быть привязан только к одной сущности). Привязка не сохраняется после перезапуска сервера.battle <battleFormat> <participants1>... vs <participants2>... [rules <battleRules>] [onwin <winCommands>]- начинает битву между указанными участниками с заданным форматом, правилами и командами при победе (последние два опциональны).reload <trainerId>- позволяет перезагрузить одного тренера из любого настроенного пути тренеров (используйте стандартную команду/reloadдля перезагрузки всех тренеров).
Важно: Начиная с версии 0.14.0-beta, команда attach остаётся рабочей, но рекомендуется использовать аргумент as <trainerId> (см. раздел "Участники").
Все команды требуют уровня доступа
2.
Участники
Команда battle поддерживает несколько типов аргументов для указания участников: одиночные селекторы сущностей (например @s, @e[...,limit=1] или @p), UUID сущностей и идентификаторы тренеров.
Дополнительно можно использовать опциональный аргумент as <trainerId>, чтобы сразу привязать тренера к выбранной сущности при старте битвы:
- Этот аргумент может следовать за любым селектором сущности и позволяет указать ID тренера, который будет привязан к сущности в начале битвы.
- Использование этого аргумента равносильно вызову
attachдля целевой сущности и делает явный вызовattachненужным (хотяattach+battleвсё ещё работает, рекомендуется использоватьbattle ... <entity> as <trainerId>). - При использовании с селектором игрока (например
@s as <trainerId>) игрок вступит в битву с временной копией команды этого тренера (отлично подходит для создания головоломок). - При использовании с другим ID тренера (например
<trainerId_1> as <trainerId_2>)trainerId_2будет привязан к той же сущности, к которой привязанtrainerId_1(если это возможно).
Аргумент
as <trainerId>доступен с версии0.14.0-beta.
Правила битвы
Правила битвы описываются JSON-объектом со следующими свойствами:
maxItemUses- указывает, сколько предметов каждый участник может использовать в битве.
Да, пока что это единственное свойство.
Команды при победе
Команды при победе тоже описываются JSON-объектом, но с более динамичной структурой. Объект может определять свойство для каждой стороны битвы (то есть 1 или 2), содержащее массив команд для выполнения в случае победы соответствующей стороны (см. примеры ниже).
Кроме того, любая команда при победе имеет доступ к специальным селекторам (похожим на @s или @e), которые позволяют выбрать любого участника битвы внутри команды. Эти селекторы имеют структуру @<n>, где <n> указывает позицию участника относительно стороны, для которой выполняется команда.
Важные вопросы: кто выполняет команду? И где она выполняется? Обычно команды при победе выполняются сервером в центре всех участников битвы. Однако можно сделать так, чтобы любой участник стал исполнителем команды - тогда она выполняется на позиции этого участника.
Теперь перейдём к примерам.
Примеры
Важно: Тренеры в следующих командах (например tbcs:mytrainer1) - это просто примеры. Вам нужно предоставить своих собственных тренеров или установить другой мод, который их добавляет (см. раздел Тренеры ниже).
tbcs attach tbcs:mytrainer1 @e[type=minecraft:villager,limit=1,sort=nearest]
Привязывает tbcs:mytrainer1 к ближайшему жителю.
tbcs battle GEN_9_SINGLES @s vs tbcs:mytrainer1
Начинает битву между игроком, выполнившим команду, и tbcs:mytrainer1 (должен быть привязан к сущности).
tbcs battle GEN_9_SINGLES @s vs tbcs:mytrainer1 rules {maxItemUses: 1}
То же самое, но ограничивает использование предметов каждой стороны до 1.
tbcs battle GEN_9_SINGLES @s vs tbcs:mytrainer1 rules {maxItemUses: 1} onwin {1: ['give @1 minecraft:diamond']}
Ещё один пример - теперь игрок получает алмаз при победе (первый участник первой стороны).
tbcs battle GEN_9_SINGLES @s vs tbcs:mytrainer1 onwin {1: ['loot spawn ~ ~ ~ loot minecraft:chests/simple_dungeon']}
Альтернатива использованию give (часто с большим количеством наград, но зависит от таблицы лута). Команда выполняется сервером в центре всех участников. Чтобы выполнить её от лица игрока (то есть заспавнить лут прямо над ним), можно добавить перед командой @1 (см. следующий пример).
tbcs battle GEN_9_MULTI @s tbcs:mytrainer1 vs tbcs:mytrainer2 tbcs:mytrainer3 onwin {1: ['give @1 minecraft:diamond', '@2 say We got them!']}
Пример позиционных селекторов. Игрок получит алмаз, а tbcs:mytrainer1 скажет "We got them!" при победе первой стороны (стороны игрока). Также показывает, как команда может выполняться от другого источника - вторая команда будет выполнена сущностью, к которой привязан tbcs:mytrainer1.
tbcs battle GEN_9_MULTI @s tbcs:mytrainer1 vs tbcs:mytrainer2 tbcs:mytrainer3 onwin {1: ['give @1 minecraft:diamond', '@2 say We got them!'], 2: ['@3 tp ~ ~10 ~']}
Расширяем предыдущий пример - добавляем команды при победе второй стороны (если сторона игрока проигрывает). Напоминание: позиционные аргументы отсчитываются относительно стороны выполнения команды слева направо. Для команд со второй стороны селекторы отображаются так:
@1->tbcs:mytrainer2@2->tbcs:mytrainer3@3->@s@4->tbcs:mytrainer1
Для команд с первой стороны:
@1->@s@2->tbcs:mytrainer1@3->tbcs:mytrainer2@4->tbcs:mytrainer3
Таким образом, команда второй стороны "накажет" игрока при проигрыше его стороны - телепортирует его на 10 блоков вверх относительно его позиции (команда выполняется игроком).
tbcs battle GEN_9_SINGLES @s vs tbcs:mytrainer1 onwin {1: ['@2 say Not bad, but are you ready for this?!', 'tbcs attach tbcs:mytrainer2 @2', 'tbcs battle GEN_9_SINGLES @1 vs tbcs:mytrainer2 onwin {1: [\'give @1 minecraft:diamond\']}']}
Этот пример связывает одну битву за другой. Разберём по шагам (все выполняются при победе игрока):
- первая команда заставляет сущность тренера
tbcs::mytrainer1сказать "Not bad, but are you ready for this?!"; - вторая команда привязывает другого тренера (
tbcs:mytrainer2) к той же сущности; - третья команда сразу же начинает новую битву между игроком и
tbcs:mytrainer2, которая тоже имеет свои команды при победе - награждает игрока алмазом.
Такую цепочку можно повторять бесконечно. Обратите внимание: чем глубже вложенность команд при победе, тем больше обратных слешей (\) требуется для экранирования апострофов (') вокруг команд.
tbcs battle GEN_9_SINGLES @s vs tbcs:mytrainer1 onwin {2: ['@1 say You need to practice more @2!'], 1: ['@2 say You got me. Take this @1', 'loot spawn ~ ~ ~ loot minecraft:chests/end_city_treasure']}
Ещё один пример из тестов.
Тренеры
Структура
Тренеры определяются в json формате. Схема тренера предоставляется RCTApi, поэтому структура в основном такая же, как у мода Radical Cobblemon Trainers (исключения: identity, которого нет в этом моде, а также battleFormat и battleRules, которые являются аргументами команд). Подробнее и пример можно найти в соответствующей документации.
Расположение
При загрузке мира файлы тренеров ищутся во всех путях из списка trainerPaths, которые указываются относительно папки мира. Все тренеры регистрируются с ID, который берётся из имени файла. Например:
mods
config
trainers
bug_catcher.json
saves
My Cool World
Strong Trainers
Ash Ketchum.json
Boring World
...
Если trainerPaths заданы как ["Strong Trainers", "../../trainers"], то:
- При загрузке мира "My Cool World" будут зарегистрированы тренеры
tbcs:bug_catcherиtbcs:ash_ketchum. - При загрузке мира "Boring World" будет зарегистрирован только тренер
tbcs:bug_catcher.
Если тренер с одинаковым ID встречается несколько раз (например из разных папок с одинаковым именем файла), то к ID последующих добавляется счётчик (
_n).
Совместимость
Мод совместим с другими модами, которые также используют RCTApi. Копии тренеров из этих модов автоматически регистрируются в TBCS при их установке (см. конфиг).
Конфигурация
Файл конфига находится по пути config/tbcs-server.toml:
[Trainers]
#━━━━━━━━━━
#Список путей относительно папки мира для поиска json-файлов тренеров при загрузке/перезагрузке мира.
#По умолчанию: ["trainers", "../trainers", "../../trainers"]
trainerPaths = ["trainers", "../trainers", "../../trainers"]
#━━━━━━━━━━
#Список ID модов от других модов, использующих RCTApi для определения тренеров.
#Копии тренеров из указанных модов также будут зарегистрированы в TBCS.
#По умолчанию: ["rctmod"]
trainerMods = ["rctmod"]
[Commands]
#━━━━━━━━━━
#Повышенный уровень доступа для команд при победе.
#По умолчанию: 2; диапазон: 1 ~ 4.
winCommandsPermission = 2
Серверное API (только серверная сторона)
Начиная с версии 0.14.0-beta, вместе с обычным модом распространяется API-версия (с суффиксом api в имени файла, например tbcs-api):
- Все функции API работают только на серверной стороне; их можно установить вместе с любым релизом
tbcs-api(клиентам не нужно устанавливать TBCS). - Если на сервере установлен обычный TBCS мод, то устанавливать
tbcs-apiрядом не нужно - TBCS уже содержит API (иначе клиентам тоже придётся устанавливать TBCS). - API-версия мода не предоставляет никаких команд - сама по себе она ничего не делает; она лишь предлагает функционал для других модов, которые могут зависеть от TBCS.
Зависимости
- Cobblemon
- Radical Cobblemon Trainers API
- Forge Config API Port (только на Fabric)
