At the very highest level, the architecture of Brine looks like this:
┌──────────────────┐
│ │
┌──▶│ Brine Protocol │◀──┐
│ │ │ │
│ └──────────────────┘ │
│ │
│ │
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ │ │ │
│ Client App │ │ Backend │
│ │ │ │
└┬─────────────────┘ └┬─────────────────┘
│ .─────────────. │ .─────────────.
├─▶( Rendering ) ├─▶( Networking )
│ `─────────────' │ `─────────────'
│ .─────────────. │ .─────────────.
├─▶( Player Input ) └─▶( MC Protocol )
│ `─────────────' `─────────────'
│ .─────────────.
└─▶( Assets )
`─────────────'
The project is based around a high-level abstraction of the Minecraft game logic, referred to as the "Brine protocol". This protocol is defined by a set of event types that are exchanged between the client application and the "backend", which is the portion of the client that actually handles communicating with the Minecraft server.
This project is structured from the ground up as a Bevy application. Most crates are structured as one or more Bevy plugins. Understanding how all the pieces fit together and interact will require a basic understanding of the Bevy ECS and app system. Start with the Bevy book.
┌───────┐
│ brine │──────────────┐
└───────┘ │
│ │
│ ▼
│ ┌─────────────┐
│ │ brine_voxel │
│ └─────────────┘
│ │
│ │
▼ ▼
┌───────────┐ ┌─────────────┐
│brine_proto│────▶│ brine_chunk │
└───────────┘ └─────────────┘
▲ ▲
┌───────────┐ │ │
│ brine_net │ │ │
└───────────┘ │ │
▲ │ │
└───────────┤ │
│ │
┌─────────────────────┐ │
│ brine_proto_backend │───────┘
└─────────────────────┘
Logic for decoding chunk data from Minecraft packets.
No Bevy dependencies.
Provides access to Minecraft data for any version.
No Bevy dependencies.
A library for implementing client-server protocols over TCP.
A high-level abstraction of the Minecraft game logic.
A backend implementation for Minecraft Java Edition. Currently powered by the
steven_protocol
crate from the
stevenarella
project.
A library for rendering chunked voxel worlds.