Skip to content

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:

json
{"uuid":"550e8400-e29b-41d4-a716-446655440000","name":"Player"}

Пример ответа для авторизованного проекта 498:

json
{
  "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 на том же авторизованном подключении:

json
{"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.

  1. Войдите в собственный аккаунт ozProtect через настроенный SSO.
  2. Подключитесь к нужному Minecraft-серверу и выполните /ozp link. OP и активная checker-сессия для этой команды не нужны.
  3. Адаптер запросит код для UUID именно текущего подключённого игрока и покажет восьмисимвольный ответ приватно. Код не публикуется в общий чат, серверный лог или extension hooks; после смены соединения ответ не выдаётся старому игроку.
  4. Передайте код только в доверенный настроенный кабинет. Network account.linkGame принимает code с личным Bearer token; истёкший или уже использованный код не является новой привязкой. Публичный URL кабинета из команды не выводится.
  5. account.getGameLinks возвращает привязки текущего аккаунта; они сохраняются после перезагрузки кабинета.
  6. 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-чекера.

  1. Модератор создаёт Minecraft-сессию в панели и передаёт игроку адрес Network и восьмисимвольный код.
  2. Игрок вводит код и подключается только за метаданными сессии, затем выбирает каталог Minecraft и явно соглашается на проверку. Подключение передаёт expected_game_id: 6; совместимый Network проверяет игру до привязки устройства, а клиент также отвергает чужую игру. Список процессов имеет отдельное согласие, выключенное по умолчанию.
  3. Игрок запускает проверку вручную. Удалённый scan.request показывает запрос и не запускает сканирование автоматически.
  4. Pipeline проверяет метаданные mod JAR, version JSON, выбранные файлы/SHA-256 и ограниченные игровые логи внутри каталога. При отдельном согласии добавляются имена/количество процессов. Результаты отправляются подтверждаемыми пакетами через Socket.IO /checker, путь /socket.
  5. Модератор рассматривает находки и ограничения проверки. Отмена или недоступные файлы не означают «чисто».
  6. Повторный scan.request открывает новое согласие на точный запрошенный набор модулей и сбрасывает process opt-in. Незапрошенные модули остаются skipped, не читают файлы и не отправляют findings. Пустой список использует показанный стандартный scope; неизвестные модули отвергаются без расширения области проверки.
  7. Дубликат запроса во время ожидания согласия не сбрасывает этот экран; запрос во время сканирования не ставит второй запуск в очередь. 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 этим не доказаны. Текущие границы проверки и региональные планы перечислены в матрице готовности.

Разработано с ❤️ от ozLiginus