Skip to content

Latest commit

 

History

History
101 lines (80 loc) · 4.73 KB

README.md

File metadata and controls

101 lines (80 loc) · 4.73 KB

Brine architecture

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.

Bevy at the core

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.

Crate details

              ┌───────┐                      
              │ 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.