TeamKind
Проект игровых серверов Minecraft Bedrock: выживание и мини-игры на одном инстансе, общие аккаунт и экономика между инстансами, глубоко модифицированное серверное ядро.

Стек
- PHP
- PocketMine-MP
- Guzzle
- Slim
- MySQL
- SQLite
- Redis
- WebSocket
- nginx
- JavaScript
Задача
До TeamKind я вёл сообщество одного из крупных проектов Minecraft Bedrock Edition: хорошо видел, какие жалобы повторяются и чего игрокам не хватает, но влиять на продукт не мог. Хотелось проект, где разработка идёт от обратной связи, платные привилегии расширяют возможности, не превращаясь в pay-to-win, а выживание, SkyWars и FastBuilders работают как одна система, а не три отдельных продукта. Технически задача упиралась в ограничения используемого ядра и конфигурации: обычное выживание начинало терять TPS уже около 70–80 игроков, а держать предстояло несколько миров и мини-игры сразу. Отдельной проблемой были злоупотребления через сформированные сетевые пакеты.
Решение
Игрок всегда заходит через лобби: оно проверяет активную сессию и отправляет его на закреплённый инстанс, а нового игрока — на наименее загруженный. Каждый инстанс держит выживание, SkyWars и FastBuilders одновременно. Переход в мини-игру происходит внутри него: инвентарь сохраняется, подготавливается под режим и возвращается после матча. Игрока никуда не пересаживают. Между инстансами общие аккаунт, привилегии, валюта и кейсы. Дома и приваты привязаны к карте и остаются локальными. Для этого я развивал и дорабатывал собственную версию серверного ядра, адаптируя её под высокую нагрузку, несколько игровых режимов и устранение уязвимостей.
Архитектура
Ключевые технические решения
- Собственный форк ядра. Апстрим PocketMine-MP к тому моменту официально не поддерживался, а базовое ядро не покрывало требований проекта, поэтому я существенно доработал его под необходимую нагрузку, стабильность и игровую механику.
- Мини-игры внутри инстанса выживания, а не на отдельных серверах: инвентарь сохраняется и восстанавливается, переподключения нет, и SkyWars не ощущается отдельным продуктом.
- Аккаунт, привилегии, валюта и кейсы общие между инстансами, а всё привязанное к карте остаётся локальным: купленное работает везде, но дома и приваты остаются привязаны к конкретной карте.
- Один аккаунт — одна активная игровая сессия: одновременно играть с него на нескольких инстансах нельзя. Чтобы перейти на другой инстанс, игрок сначала завершает текущую сессию.
- Управляемая перезагрузка: перед обновлением сервер корректно завершает активность, вместо того чтобы обрывать игроков на середине.
Проект игровых серверов Minecraft Bedrock Edition, в котором полноценное выживание было объединено с SkyWars и FastBuilders.
Ядро
Отдельные инстансы держали 180+ игроков одновременно. Ядро существенно дорабатывалось под нагрузку проекта.
TeamCore — глубоко модифицированный форк серверного ядра с существенными изменениями в производительности, сетевой безопасности, работе миров и чанков, а также игровой логике. После доработок ядро стабильнее работало под нагрузкой и лучше соответствовало требованиям проекта. Благодаря этим изменениям TeamKind стал одним из первых серверов Minecraft Bedrock Edition 1.1.X в СНГ, где полноценное выживание и SkyWars работали на одном сервере при высоком для этого ядра онлайне. Это же позволило добавить много собственных команд и игровых механик без потери стабильности. Одна из стабильных версий этого ядра доступна здесь.

Обзор
Аккаунт и авторизация
Для всех серверов проекта использовался единый аккаунт. Сначала пароли хешировались SHA-512 с индивидуальной солью и дополнительным серверным секретом, который не хранился в базе. Через несколько месяцев схему заменили на bcrypt: он создан для хранения паролей, а его намеренно высокая вычислительная стоимость делает перебор дорогим. После входа сессия сохранялась, и при переходе между серверами пароль вводить заново не требовалось.

Сайт доната и платежи
Сайт доната был связан с общей системой аккаунтов проекта: пользователь вводил игровой ник, сайт проверял зарегистрированный аккаунт и привязывал покупку к нему. Оплата шла через интеграцию нескольких внешних платёжных провайдеров: банковские карты, электронные кошельки и другие способы. Купленные товары, валюта и привилегии привязывались к аккаунту, а не к серверу, поэтому работали на любом сервере и в любом режиме. На сайте были категории товаров и отслеживание заказов.
Донат без pay-to-win
Донат не должен был давать преимущества над другими игроками или возможности им навредить. Поэтому, например, предметы и ресурсы нельзя было перенести из креатива в выживание, и действовали другие ограничения, сохранявшие баланс между платными и обычными возможностями.
Бонусные вопросы
Бонусные вопросы связывали игру с группой проекта во ВКонтакте. Вопрос, время публикации и награда задавались на сервере, а за пять минут до старта сервер сам создавал в группе отложенную запись. Игрок отвечал командой /bonus на любом сервере проекта; сервер проверял время и ответ и при успехе выдавал награду.

Управляемая перезагрузка
Перед обновлением сервер корректно завершал активные процессы и мини-игры, выдавал игрокам награды и приостанавливал связанные сценарии. Перезагрузка начиналась только после предупреждения игроков и завершения их текущих действий, чтобы не терять данные.

Модерация
У модераторов был набор инструментов под разные нарушения: блокировки, временные ограничения, отключение отдельных возможностей, удаление игрока с сервера. Права модераторов гибко настраивались.

Торговля между игроками
Игроки покупали и продавали предметы друг другу через встроенную торговлю. Механика закрывала типичные схемы обмана и со стороны продавца, и со стороны покупателя. Особо ценные предметы выставлять на продажу было нельзя, а с каждой сделки сервер удерживал комиссию 10% от стоимости предмета.
Игровые механики
Уровни
Уровень рос за время в игре, бездействие не засчитывалось. За уровни выдавались валюта, магические кейсы, привилегии и доступ к отдельным возможностям. Часть наград совпадала с платными привилегиями и бонусами, поэтому активные игроки получали их бесплатно; если у игрока уже была привилегия выше, вместо дубля он получал валюту.
FastBuilders
Режим для тренировки быстрой постройки: платформы создавались автоматически, результат фиксировался, за него выдавалась награда. Возможности выживания в режиме оставались, если не мешали тренировке.
Магическая раздача
На специальных участках спавна периодически появлялись редкие и ценные предметы.
Невидимость
В отличие от стандартного эффекта невидимость убирала не только модель персонажа, но и все признаки присутствия: частицы эффектов, звуки шагов, броню и подсказки при взаимодействии. Команда /vanish list показывала модераторам всех, кто сейчас невидим.
Другие механики
В видео — система случайных заданий с наградами и смена ника, префикса и скина прямо в игре.
Результаты
- Один инстанс держал 180+ игроков одновременно.
- Выживание, SkyWars и FastBuilders работали внутри одного инстанса, без пересадки игрока между серверами.
- Аккаунт, привилегии, валюта и кейсы оставались общими между инстансами.
- Доработанное ядро устранило исходное ограничение производительности: до этого используемая конфигурация начинала терять TPS уже при 70–80 игроках.
Метрики
- игроков онлайн на одном инстансе
- 180+
Факты
- Самый активный игрок проекта
Wauderза последний год работы TeamKind провёл в игре 1339,3 часа; второй результат — 797,5 часа уSaid_123. - Одна из стабильных версий собственного форка ядра TeamCore сохранилась в открытом доступе на GitHub.