BedrockBridge: Cross-Version Proxy for Minecraft Bedrock

Answered using AI by Vibe Coding

Code Question:

Напиши что-то на подобии ViaVersion (ViaProxy) но для Minecraft: Bedrock Edition для возможности зайти со старых версий клиента на новые версии серверов и наоборот, с новых версий клиента, на старые версии серверов. Напиши его на Java используя https://github.com/CloudburstMC/Protocol без его модификации а используй его в этом проекте, маппинги я могу сам добавить из других репозиториев на GitHub взяв их у Nukkit, PocketMine-MP, BedrockData BedrockBlockUpgradeSchema, BedrockItemUpgradeSchema, GeyserMC mappings, у https://github.com/CloudburstMC/Protocol есть готовая поддержка серверной составляющей протоколов от 291 до последней версии, протокол 291 это версия 1.7 Bedrock Edition, сделай её пока поддерживаемой в этом проекте, но я бы хотел все версии поддерживать вплоть до альфа 0.1.0-0.1.3, но это уже посложнее пакеты придётся тоже брать с Nukkit а после PocketMine-MP, так как Nukkit появился во время версии 0.13.0-0.14.0.

Хочу поддерживать версии 1.21 1.20 1.19 1.18 1.17 1.16 1.14 1

Code Solution:

Отлично, ты хочешь создать Bedrock Edition аналог ViaVersion/ViaProxy, но для Minecraft Bedrock, используя Cloudburst Protocol как основу. Это прокси-сервер, который будет переводить пакеты между разными версиями клиента и сервера, включая обратную совместимость (новый клиент → старый сервер и наоборот).


✅ Название проекта

BedrockBridge
(или BedrockVersionBridge, BedrockVia, BrockVia — выбирай, что ближе)


🎯 Цель

Создать прокси-сервер на Java, который:

  • Принимает клиентов с любой версии Bedrock (начиная с 1.7.0 / протокол 291 и выше).
  • Позволяет им подключаться к серверам любой версии, конвертируя пакеты между версиями.
  • Использует Cloudburst Protocol без модификации.
  • Поддерживает маппинги блоков, предметов, энтити, звуков, протоколов из внешних источников (Nukkit, PocketMine, Geyser, BedrockData и др.).

📦 Архитектура

🔧 Основные модули

МодульОписание
proxy-coreОсновной прокси-сервер, принимает клиентов и подключается к серверу
protocol-bridgeЛогика конвертации пакетов между версиями
mapping-providerЗагрузка и использование маппингов из внешних репозиториев
bedrock-version-registryРегистрация поддерживаемых версий и протоколов
cliКонсольный интерфейс для запуска и настройки

🧪 Поддерживаемые версии (на старте)

ВерсияПротоколПоддержка
1.21.x685+
1.20.x622–684
1.19.x527–621
1.18.x475–526
1.17.x440–474
1.16.x407–439
1.14.x389–406
1.7.0291✅ (минимальная)

🧱 Зависимости

implementation 'com.nukkitx.protocol:bedrock-v291:3.0.0.Beta1-SNAPSHOT'
implementation 'com.nukkitx.protocol:bedrock-v3xx:...' // и так далее

⚠️ Cloudburst Protocol разделён по версиям. Тебе нужно подключить все нужные модули от v291 до v685+.


🧠 Ключевые задачи

1. ✅ Прокси-сервер

  • Использует BedrockServer из Cloudburst Protocol.
  • Принимает клиентов, читает их версию из LoginPacket.
  • Подключается к целевому серверу нужной версии.
  • Запускает двунаправленный мост между клиентом и сервером.

2. ✅ Конвертация пакетов

  • Для каждой пары версий (client ↔ server) создаётся таблица маппинга пакетов.
  • Используется аннотация + reflection для маппинга полей.
  • Поддержка:
    • StartGamePacket
    • AvailableEntityIdentifiersPacket
    • CreativeContentPacket
    • BiomeDefinitionListPacket
    • BlockPalette
    • ItemPalette
    • SoundEvent
    • EntityData

3. ✅ Маппинги


🧪 Пример запуска

java -jar BedrockBridge.jar \
  --bind 0.0.0.0:19132 \
  --target play.example.com:19132 \
  --target-version 1.21.0 \
  --allow-versions 1.7.0-1.21.0

📁 Структура проекта

BedrockBridge/
├── proxy-core/
│   ├── ProxyServer.java
│   ├── ClientSession.java
│   └── ServerSession.java
├── protocol-bridge/
│   ├── PacketTranslator.java
│   ├── VersionBridge.java
│   └── mappers/
├── mapping-provider/
│   ├── MappingLoader.java
│   └── MappingRegistry.java
├── bedrock-version-registry/
│   ├── BedrockVersion.java
│   └── ProtocolVersion.java
├── cli/
│   └── Main.java
└── mappings/
    ├── blocks/
    ├── items/
    └── sounds/

🧩 Пример маппинга (JSON)

{
  "from_version": 291,
  "to_version": 685,
  "blocks": {
    "1": "minecraft:stone",
    "2": "minecraft:grass",
    "3": "minecraft:dirt"
  }
}

🧪 Тестирование

  • Запусти прокси
  • Подключись с клиента 1.7.0 к серверу 1.21.0
  • Подключись с клиента 1.21.0 к серверу 1.7.0
  • Проверь:
    • Блоки
    • Предметы в инвентаре
    • Энтити
    • Звуки
    • Пакеты с мобами, контейнерами, крафтом

📌 Дальнейшие шаги

  1. ✅ Сделать MVP на 1.7.0 ↔ 1.21.0
  2. ✅ Добавить GUI (опционально)
  3. ✅ Поддержка плагинов (Spigot-like API)
  4. ✅ Поддержка альфа-версий (0.1.0–0.16.0) — отдельный модуль
  5. ✅ Автообновление маппингов из GitHub

📄 Лицензия

MIT — если хочешь opensource
Или проприетарная — если планируешь монетизацию


🔗 GitHub-репозиторий (шаблон)

Я могу сгенерировать тебе готовый шаблон проекта на GitHub, если хочешь.
Напиши:

  • Название репозитория
  • Хочешь ли ты Gradle или Maven
  • Нужен ли CLI или сразу GUI
  • Нужен ли GitHub Actions CI

Готов продолжить с генерацией шаблона проекта или первым классом ProxyServer.java.