Minecraft
Minecraft использует game_id = 6. Интеграция находится в локальной разработке. Цель — серверы Minecraft 1.20 и новее через адаптеры для конкретной платформы и версии. Это не подтверждение совместимости со всеми серверами 1.20+.
Перед установкой сверяйтесь с матрицей готовности. Готового производственного релиза и универсального JAR для всех загрузчиков пока нет.
Компоненты сервера
Java-проект отделён от существующего Rust-расширения:
| Компонент | Назначение |
|---|---|
com.ozprotect.core | Жизненный цикл, идентификация игроков и протокол Network |
com.ozprotect.anticheat | Серверные наблюдения и сбор свидетельств для проверки |
com.ozprotect.ext.* | API независимых расширений |
| Адаптер Bukkit/Spigot/Paper | Связь ядра с событиями и командами сервера |
| Адаптеры Forge/NeoForge/Fabric | Отдельные артефакты и native-проверки точных версий из матрицы готовности |
Основной Bukkit-артефакт собирается против Spigot API 1.20.4-R0.1-SNAPSHOT и проверен на Paper 1.20.4 build 499. Отдельный minimum-API вариант собран против точного Spigot API 1.20-R0.1-20230612.113428-32, Java 17; он сохраняет основной артефакт и проверен на Paper 1.20 build 17 и native Spigot 1.20.1 build 3871. У последнего официальный source build через BuildTools 201, версия 3871-Spigot-d2eba2c-3f9263b.
Это три конкретные runtime-цели, а не подтверждение всех Bukkit/Spigot/Paper 1.20+. Standalone CraftBukkit, Spigot 1.20.0, другие релизы и гибридные серверы не проверены. api-version: '1.20' не заменяет runtime-проверку. Немодифицированный vanilla без plugin/loader API и Folia не поддерживаются. Точные Java и loader-версии перечислены в матрице.
Отдельные minimum mod targets также прошли native private link/реальный SSO и ban/unban/stable-ID/history: Forge 1.20/46.0.14, Fabric 1.20/Loader 0.16.10/API 0.83.0+1.20 и legacy NeoForge 1.20.1/47.1.106. Последний собирается против net.neoforged:forge:1.20.1-47.1.106, использует старые net.minecraftforge events и остаётся отдельным JAR от Forge и новых NeoForge.
Следующая Bukkit-граница Java 21/API 1.20.6 и exact Paper 1.20.6 build 151 только подготовлена в исходниках (f789366) и прошла статические XML/JS/PowerShell проверки. Для неё нет build/runtime proof; она не входит в проверенные цели и не заменяет текущий JAR.
Наблюдение античита само по себе не доказывает нарушение. Серверные свидетельства нужно оценивать с учётом задержки, состояния сервера и особенностей сборки; текущий сбор свидетельств не означает готовый универсальный античит.
Подключение к Network
Серверный адаптер подключается к аутентифицированному пространству имён Socket.IO /server. Транспортный путь: /socket, режим: WebSocket без polling. Это Socket.IO, а не произвольное WebSocket-соединение. Адрес и серверные учётные данные выдаёт команда ozProtect; язык панели не определяет адрес Network.
Проект и сервер определяются авторизованным подключением. Переданный игроком project_id не может менять эту область доступа. Режим аутентификации Minecraft и достоверность UUID остаются ответственностью игрового сервера: отображение UUID в ID не подтверждает владение аккаунтом.
UUID и постоянный ID игрока
До отправки событий игрока адаптер вызывает player.minecraft2steam_id:
{"uuid":"550e8400-e29b-41d4-a716-446655440000","name":"Player"}Пример ответа для авторизованного проекта 498:
{
"status": "success",
"response": {
"steam_id": "2004980000000000001",
"player_id": "2004980000000000001",
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"project_id": 498,
"game_id": 6
}
}Network сохраняет соответствие (project_id, UUID) → player_id в game_player_ids. ID содержит 19 цифр: 2 | project_id (5 цифр) | sequence (13 цифр). Последовательность выдаёт центральная primary-БД; это не хеш UUID.
- Храните и передавайте ID строкой, без преобразования в JavaScript
Number. - Повторный UUID в том же проекте получает сохранённый ID. В другом проекте это отдельная идентичность.
- Не вычисляйте ID самостоятельно на каждом сервере и не удаляйте соответствия, пока существует связанная история.
- Используйте возвращённый ID в прежних полях
steam_idдля подключений, проверок, банов, мутов, чата, репортов и истории. users.uuidсохраняет прежний смысл связи аккаунтов; Minecraft UUID хранится отдельно.
Для команды офлайн-игроку запросите player.getIdentity на том же авторизованном подключении:
{"steam_id":"2004980000000000001"}Ответ содержит исходный uuid. Команду Minecraft нужно адресовать этому UUID. Обратное разрешение ID другого проекта запрещено.
Minecraft-профиль помечается id_kind: minecraft, game_id: 6 и steam: false в совместимом объекте профиля. UUID доступен отдельно как info.minecraft_uuid. Steam-аутентификация, VAC, статистика Steam и инвентарь Rust к такому ID не применяются; неизвестные данные нельзя заменять выдуманными значениями. Идентификаторы настоящих Steam-игроков не меняются.
Приватная привязка игрового аккаунта
Привязка Minecraft к аккаунту ozProtect не требует Steam. Она связывает аккаунт с постоянной идентичностью игрока внутри проекта и не меняет UUID mapping или игровые ID.
- Войдите в собственный аккаунт ozProtect через настроенный SSO.
- Подключитесь к нужному Minecraft-серверу и выполните
/ozp link. OP и активная checker-сессия для этой команды не нужны. - Адаптер запросит код для UUID именно текущего подключённого игрока и покажет восьмисимвольный ответ приватно. Код не публикуется в общий чат, серверный лог или extension hooks; после смены соединения ответ не выдаётся старому игроку.
- Передайте код только в доверенный настроенный кабинет. Network
account.linkGameпринимаетcodeс личным Bearer token; истёкший или уже использованный код не является новой привязкой. Публичный URL кабинета из команды не выводится. account.getGameLinksвозвращает привязки текущего аккаунта; они сохраняются после перезагрузки кабинета.account.unlinkGameпринимаетproject_idи строковыйplayer_idдля снятия собственной привязки. Снятие закрывает доступ через неё, но не удаляет центральное соответствие UUID/ID и историю игрока.
Все три HTTP-метода вызываются как POST /methods/account.<method> на назначенном Network с личной авторизацией. В проверках minimum Paper 1.20 и Spigot 1.20.1 реальный non-OP private-code → SSO/Bearer redeem/list/replay rejection/unlink прошёл без Steam; native бан, запрет входа, разбан, стабильный строковый ID и история проверялись отдельным сценарием. Такой же private-link поток подтверждён для остальных pinned целей матрицы. NeoForge 1.20.4 дополнительно имеет отдельное доказательство браузерной привязки и апелляции.
Код подтверждает контроль игровой идентичности на этом сервере. Offline UUID сам по себе не доказывает владение online Minecraft-аккаунтом. Используйте фактически выданный локальный origin: публичные .com/.ru endpoint и downloads этим сценарием не объявляются.
Minecraft Checker для Windows
ozl.ozprotect.checker.mc — отдельный C#/.NET 8 WPF-клиент и ядро проверки. Исходная сборка требует Windows x64 и .NET 8 Desktop Runtime; подписанного установщика пока нет. Это отдельный компонент от Rust-чекера.
- Модератор создаёт Minecraft-сессию в панели и передаёт игроку адрес Network и восьмисимвольный код.
- Игрок вводит код и подключается только за метаданными сессии, затем выбирает каталог Minecraft и явно соглашается на проверку. Подключение передаёт
expected_game_id: 6; совместимый Network проверяет игру до привязки устройства, а клиент также отвергает чужую игру. Список процессов имеет отдельное согласие, выключенное по умолчанию. - Игрок запускает проверку вручную. Удалённый
scan.requestпоказывает запрос и не запускает сканирование автоматически. - Pipeline проверяет метаданные mod JAR, version JSON, выбранные файлы/SHA-256 и ограниченные игровые логи внутри каталога. При отдельном согласии добавляются имена/количество процессов. Результаты отправляются подтверждаемыми пакетами через Socket.IO
/checker, путь/socket. - Модератор рассматривает находки и ограничения проверки. Отмена или недоступные файлы не означают «чисто».
- Повторный
scan.requestоткрывает новое согласие на точный запрошенный набор модулей и сбрасывает process opt-in. Незапрошенные модули остаютсяskipped, не читают файлы и не отправляют findings. Пустой список использует показанный стандартный scope; неизвестные модули отвергаются без расширения области проверки. - Дубликат запроса во время ожидания согласия не сбрасывает этот экран; запрос во время сканирования не ставит второй запуск в очередь. Process-only запрос без отдельного разрешения остаётся на согласии. Закрытая сессия игнорирует поздние scan/chat events и stale ACK.
Символические ссылки и junction пропускаются; чтение ограничено выбранным каталогом. Клиент не предоставляет удалённый файловый браузер и не выполняет входящие команды. Только при отдельном opt-in собирается до 256 имён процессов и их количество; command lines, память и реестр не читаются. Чтение файлов остаётся в выбранном каталоге. Отправляются относительные пути, SHA-256, метаданные модов и свидетельства срабатывания правил; содержимое JAR и абсолютный выбранный путь не загружаются. При подключении передаются случайный постоянный ID установки, версия приложения и сведения об ОС/архитектуре; ID не является аппаратным отпечатком.
Модули имеют статусы complete, partial, unavailable, cancelled, skipped; отказ от процессов означает skipped, отсутствие mods означает unavailable. complete сообщает завершение ограниченного модуля, а не чистый компьютер. session.refuse передаёт отказ серверу; итоговый экран задаёт серверный verdict.
Подозрительное имя файла само по себе не доказывает использование читов. Находки предназначены модератору и не должны автоматически банить игрока. Проверка не гарантирует обнаружение всех изменённых клиентов и не доказывает, что читы никогда не использовались.
Перед эксплуатацией
Миграции Network применяются отдельным проверяемым шагом; запуск backend не меняет схему автоматически. Подготовка исходников не означает, что производственная БД уже обновлена.
Для изолированной MySQL уже опубликована фикстура; локальный путь C# → Network → MySQL проверен на синтетических данных. Точные Paper/Spigot/Forge/Fabric/NeoForge цели имеют отдельные native-проверки. В f283729 actual WPF handlers/pipeline и C# transport прошли локальный repeat-consent сценарий с настоящими SSO/panel/Network запросами и MySQL, но без показа окна и чтения настоящего игрового каталога. Другие версии, source-prepared Paper 1.20.6 и реальная player/signing/release acceptance этим не доказаны. Текущие границы проверки и региональные планы перечислены в матрице готовности.
