Плагин для проверок игроков на читы — спародирован с сервера FunTime.
Модератор вызывает подозреваемого командой, игрока «замораживает» и телепортирует в проверочную комнату, между ними открывается приватный чат, а сверху у обоих висит боссбар с таймером.
По итогу модератор выносит вердикт — игрок либо получает награду за честную игру, либо автоматическое наказание (warn / tempban / ban) согласно правилам сервера.
Все проверки пишутся в базу данных.
- Заморозка игрока. После вызова цель не может двигаться, поворачиваться, ломать/ставить блоки, выбрасывать и подбирать предметы, получать урон. Таймер запускается не сразу, а только когда игрок проявит активность (двинется, нажмёт ЛКМ/ПКМ, напишет в чат) — так модератор понимает, что человек действительно за компьютером.
- Боссбар с таймером у обеих сторон: модератор видит «У игрока осталось времени», цель — «У вас осталось времени». Цвет, стиль и тексты настраиваются.
- Приватный чат проверки. Всё, что пишет проверяемый, уходит только модератору (и наоборот). Сообщения кликабельны для копирования. У модератора есть префикс
!для письма в обычный публичный чат. - Проверочные комнаты. Можно указать конкретную комнату или дать плагину выбрать случайную свободную. Занятые комнаты не предлагаются и не назначаются повторно.
- Режим удалённого доступа (AnyDesk / RustDesk). Игрок отправляет
/anydesk <цифры>или/rustdesk <цифры>, таймер останавливается, код уходит модератору, проверка переходит в «ручной» режим. - Автоматические наказания. Вердикт раскрывается в команду наказания из конфига. Поддерживаются категории
clear(прошёл),warn,tempban,banс привязкой к пунктам правил (4.2, 4.3, 4.3.1, 4.3.2). - Распознавание признания. Если игрок во время фриза пишет «У меня чит» (фразы настраиваются) — проверка автоматически завершается с указанной причиной и наказанием.
- Награда за честную игру. При вердикте «чист…» игрок получает настраиваемый предмет (по умолчанию — именной Трофей с лором, чарами и датой) и поздравительное сообщение.
- Обработка выхода/кика. Если игрок выходит во фризе — применяется наказание за уход. Если выходит в режиме удалённого доступа — модератору приходит кликабельное
[Забанить]. Если выходит модератор — у цели запускается отсчёт ожидания, после чего она отпускается. - Хранение в БД. H2 (файловая, из коробки) или MySQL/MariaDB через пул HikariCP. По каждой проверке сохраняются модератор, цель, причина (ключ), ранг, время начала/конца и номер комнаты.
- Гибкий язык и табкомплит. Все тексты в
lang.yml, все вердикты — вconfig.ymlс алиасами (в т.ч. русскими) и автодополнением в команде/revise finish.
Базовая команда — /revise. Без аргументов выводит список всех доступных команд.
| Команда | Что делает | Право |
|---|---|---|
/revise start <ник> [комната] |
Вызвать игрока на проверку. Без указания комнаты выбирается случайная свободная. | revises.use |
/revise stop |
Принудительно завершить проверку без вердикта (отпустить игрока). | revises.use |
/revise finish <вердикт> |
Завершить проверку с вердиктом. Все вердикты поддерживают табкомплит. | revises.use |
/revise addtime <время> |
Добавить время ожидания (180, 3m, 30s…). Ограничено лимитом группы. |
revises.use |
/revise remote |
Перевести проверку в режим AnyDesk и остановить таймер. | revises.remote |
/revise active |
Список текущих активных проверок. | revises.active |
/revise logs <ник> |
Последние 10 проверок игрока из базы. | revises.logs |
/anydesk <код> · /rustdesk <код> |
Команды для проверяемого: отправить код AnyDesk/RustDesk остановив таймер проверки. | — |
| Право | Назначение |
|---|---|
revises.use |
Доступ к основным командам проверки. |
revises.remote |
Перевод проверки в режим remote (остановка таймера). |
revises.active |
Просмотр активных проверок. |
revises.logs |
Просмотр логов проверок. |
revises.exempt |
Игрока с этим правом нельзя вызвать на проверку. |
revises.addtime.admin |
Повышенный лимит на добавление времени (см. addtime-limits в конфиге). |
- Вызов. Модератор пишет
/revise start <ник>. Создаётся сессия в состоянииPENDING, у модератора появляется боссбар «Ожидаем движение игрока» (дабы не вызывать AFK игроков). - Старт. Как только цель проявляет активность, сессия переходит в
STARTED: игрока замораживают и телепортируют в комнату проверки, запускается таймер (по умолчанию 180 сек), у обоих появляется боссбар, а проверяемому раз в 2 секунды показывается инструкция по прохождению проверки. - Диалог. Стороны общаются через приватный чат проверки. Игрок отправляет код удалённого доступа → проверка уходит в
REMOTE, таймер останавливается. - Итог:
/revise finish <чист…>→ игрок получает награду, поздравление и телепортируется на спавн;/revise finish <причина наказания>→ выполняется команда наказания (warn/tempban/ban);- признание в чате по ключевым словам → авто-завершение с наказанием за признание;
/revise stop→ проверка останавливается без вердикта;- истечение таймера или выход во время фриза → авто-наказание.
- Запись. Любое завершение с вердиктом сохраняется в БД (асинхронно).
Состояния сессии: PENDING → STARTED → (REMOTE) → финиш.
- Соберите
.jar(см. ниже) или возьмите готовый из releases. - Положите его в папку
plugins/сервера на Paper/Spigot 1.16.5. - Запустите сервер — сгенерируются
config.ymlиlang.yml. - Настройте комнаты, спавн, наказания и тексты под свой сервер, затем перезапустите плагин.
Note
Для корректной работы плагина необходима Java 16+ (плагин компилируется под Java 16).
Проект использует Gradle с плагином Shadow для того, чтобы запаковывать все зависимости.
# Linux/macOS
./gradlew build
# Windows
gradlew.bat buildГотовый RevisesFT-<version>.jar появится в build/libs/.
Стек зависимостей: LiteCommands (команды и аргументы), HikariCP + H2/MySQL (БД), Adventure / MiniMessage (текст), Lombok (бойлерплейт).
| Секция | Описание |
|---|---|
storage |
Тип БД (h2 / mysql) и параметры подключения. |
revise.defaultSeconds |
Стартовое время проверки, сек. |
revise.maxAdditionalSeconds |
Максимум, добавляемый одной командой addtime. |
revise.addtime-limits |
Лимиты добавления времени по правам (например, admin с revises.addtime.admin). |
revise.spawn-location |
Координаты, куда телепортируется игрок после проверки. Формат: world,x,y,z,yaw,pitch. |
revise.rooms |
Список проверочных комнат с координатами. |
revise.timeout-punishment / freeze-quit-punishment |
Команды наказания при истечении таймера и при выходе во фризе. |
revise.confession |
Фразы-признания, причина и команда наказания. |
revise.time-after-leave |
Сколько ждать после выхода модератора, прежде чем отпустить цель. |
revise.sounds |
Звуки на события (старт, добавление времени, выход, remote, чат). |
revise.rewards.clear-any |
Предмет-награда за пройденную проверку. |
revise.finish-reasons |
Дерево вердиктов: clear, warn, tempban, ban с алиасами и командами. |
О вердиктах. В базу сохраняется ключ, а не введённый текст. Например, ввод xрей → ключ revise.finish-reasons.warn.4.3.1.reasons.XRay, а чист(бета) → revise.finish-reasons.clear.beta. У каждого вердикта может быть несколько алиасов (русских и английских) — все они подсказываются в табкомплите.
Все сообщения, тексты боссбаров, формат инструкции игроку и форматы чата. Поддерживаются legacy-коды цветов (&c, &6, …) и плейсхолдеры (%player%, %time%, %room%, %reason% и др.).
Из задуманного пока не реализовано (есть только заготовки):
- Discord-интеграция. В
utils/DiscordWebhook.javaлежит только утилита вебхука. Нет конфига Discord, бота, проверки логина/пароля игрока, авто-remoteпри заходе игрока в Discord, выдачи и отзыва прав на голосовой канал. - Межсерверный вызов через Netty. Сейчас всё работает локально через Bukkit API (
teleport, локальные события). Прокси-интеграции (BungeeCord/Velocity) и plugin messaging нет. - Уменьшение кол-ва зависимостей в Shadow-джаре. Сейчас в итоговый
.jarпопадают все зависимости, включая те, что нужны только для разработки (например, H2 для тестов). В будущем стоит отделить их наcompileOnlyиruntimeOnlyлибо прописыватьexclude, чтобы не раздувать размер плагина.
src/main/java/kz/itzhiti/revisesft/
├── RevisesFT.java # точка входа, регистрация команд и слушателей
├── command/ # /revise, /anydesk, аргументы и табкомплит
├── listeners/ # обработка движения, чата, входа/выхода
├── revise/ # ядро: менеджер, сессия, состояния, чат-сервис
│ └── reason/ # загрузка и резолв вердиктов из конфига
├── storage/ # конфиги и слой БД (Database, ReviseRepository)
└── utils/ # текст, время, звуки, локации, команды
src/main/resources/ # plugin.yml, config.yml, lang.yml