- game.fx.pointer + расширенный game.fx.beam: BeamManager (текстуры/curved/ градиент/quest-marker), ScriptSandboxWorker (_normFxPoint от DataCloneError), GameRuntime (fx.createPointer/pointerTarget/pointerUpdate/beamUpdate/ beamVisible), BabylonScene._activatePointers. 1-в-1 со студией. - Dev JWT-панель на экране «Нужен JWT» (только localhost): кнопка → инпут → localStorage.player_jwt + reload. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
6.8 KiB
API, которые использует плеер
Плеер — это клиент. Все данные он берёт с серверных API. Этот документ — полный список эндпоинтов которые он дёргает, зачем и от чего ломается если API изменится.
Базовый URL
В prod: https://api.rublox.pro (alias на minecraftia-school.ru/api-storys)
В dev: https://dev-api.rublox.pro (staging, см. [reference-staging-env])
Локально: http://localhost:8674 (storys-микросервис)
Эндпоинты — список
Игры и лента
| Method | Path | Когда зовётся | Сломается если... |
|---|---|---|---|
| GET | /kubikon3d/feed?tab=hot|new|popular|topweek |
при заходе на главную | поле games[] отсутствует |
| GET | /kubikon3d/trending |
главная, секция трендов | возвращает не-массив |
| GET | /kubikon3d/search?q=<query> |
поиск игр | поле results[] отсутствует |
| GET | /kubikon3d/collections |
главная, секции «Хиты», «Новинки» | возвращает не-массив |
| GET | /kubikon3d/projects/<id> |
при открытии конкретной игры | поле project_data отсутствует или поломан JSON-формат |
| GET | /kubikon3d/my-projects |
страница «Мои игры» | в ответе нет projects[] |
| GET | /kubikon3d/top-authors |
страница «Топ авторов» | возвращает не-массив |
| GET | /kubikon3d/events |
главная, баннер мероприятий | возвращает не-массив |
Игровой процесс (telemetry)
| Method | Path | Когда | Что шлёт |
|---|---|---|---|
| POST | /kubikon3d/play/heartbeat |
каждые 30 сек пока игрок в игре | { game_id, play_time_ms } |
| POST | /kubikon3d/activity |
при входе/выходе из игры | { game_id, action: 'enter'|'leave' } |
| POST | /kubikon3d/perf-log |
при детектировании просадки FPS <20 на 5+ сек | { game_id, fps, draw_calls, mem } |
| POST | /kubikon3d/bug-reports |
юзер жмёт «Сообщить о баге» | { game_id, description, screenshot_b64 } |
| POST | /kubikon3d/reports |
юзер репортит игру | { game_id, reason, comment } |
Скины и аватары (Рублокс-персонажи)
| Method | Path | Когда |
|---|---|---|
| GET | /kubikon3d/rublox/equipped-skin/<user_id> |
при спавне аватара любого игрока |
| GET | /kubikon3d/rublox/owned-skins |
страница «Мои скины» |
| POST | /kubikon3d/rublox/equipped-skin |
юзер сменил скин |
| GET | /api-storys/rublox/avatars/<user_id> |
список аватаров юзера |
| GET | /api-storys/rublox/outfit/<user_id> |
детали одежды |
| GET | /kubikon-assets/characters/skins_manifest.json |
при загрузке плеера, список всех доступных скинов |
Эмоушены (R15 анимации)
| Method | Path | Когда |
|---|---|---|
| GET | /api-storys/rublox/emotes/list |
при заходе в игру (для меню эмоушенов) |
| POST | /api-storys/rublox/emotes/play/<emote_id> |
юзер выбрал эмоушен |
Модели и ассеты
| Method | Path | Когда |
|---|---|---|
| GET | /kubikon3d/models/public |
при загрузке игры — список public GLB-моделей |
| GET | /kubikon3d/models/mine |
в редакторе (плеер запускает превью своих моделей) |
| GET | /kubikon3d/models/<id> |
при первом упоминании модели в проекте |
Админка (только видна юзерам с ролью admin)
Все /kubikon3d/admin/* доступны только если в JWT юзер имеет роль admin. Иначе бэк возвращает 403.
| Method | Path | Что показывает |
|---|---|---|
| GET | /kubikon3d/admin/dashboard |
сводка: онлайн, активные игры |
| GET | /kubikon3d/admin/online |
список онлайн-юзеров |
| GET | /kubikon3d/admin/all-games |
все игры с фильтрами |
| GET | /kubikon3d/admin/moderation-queue |
очередь премодерации (для review-игр) |
| GET | /kubikon3d/admin/reports |
репорты на игры |
| GET | /kubikon3d/admin/bug-reports |
баг-репорты |
| GET | /kubikon3d/admin/comments |
модерация комментариев |
| GET | /kubikon3d/admin/chat/messages |
чат-сообщения |
| GET | /kubikon3d/admin/chat/bans |
список банов в чате |
| GET | /kubikon3d/admin/authors |
топ авторов с детальной статистикой |
Multiplayer (Colyseus)
WebSocket-соединение, не HTTP. Адрес: wss://multiplayer.rublox.pro/<room_id>. Сейчас работает через kubikon-realtime микросервис (VM 110, port 8685, Node.js+Colyseus+Redis).
Аутентификация
Все приватные эндпоинты ожидают JWT в заголовке Authorization: Bearer <token>. JWT выдаёт /api-user/auth/login. Срок жизни access-токена — 1 час, refresh-токена — 30 дней.
В плеере токен хранится в localStorage.jwt, рефрешится автоматически при 401 через localStorage.refresh_token → /api-user/auth/refresh.
Изменения API
До publish: если меняешь сигнатуру эндпоинта (убираешь поле, переименовываешь, меняешь тип) — это breaking change. Объявление за 48 часов в канале #разработка на https://team.rublox.pro.
Записывай в API_CHANGELOG.md админ-репо (приватный, minecraftia-school.ru/...) — это позволяет отследить какие изменения когда были.
Что делать если эндпоинт пропал
- Открой issue в репо плеера: «API endpoint /xxx not found».
- Прикрепи console-лог с ошибкой.
- Кто-то из core-команды посмотрит в
API_CHANGELOG.mdадмин-репо и ответит — это было умышленное изменение или баг.
Контакты
- Issue tracker: https://git.rublox.pro/rublox/player/issues
- Чат:
#разработкана https://team.rublox.pro