Initial commit and progress blocking out
This commit is contained in:
		
							
								
								
									
										22
									
								
								src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/main.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
mod storage;
 | 
			
		||||
mod storage_server;
 | 
			
		||||
use clap::Parser;
 | 
			
		||||
 | 
			
		||||
#[derive(Parser, Debug)]
 | 
			
		||||
#[command(author, version, about, long_about = None)]
 | 
			
		||||
struct Args {
 | 
			
		||||
    /// `http` starts a build-in http server that listens for reads and writes
 | 
			
		||||
    /// to the database
 | 
			
		||||
    #[arg(long)]
 | 
			
		||||
    http: bool,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn main() {
 | 
			
		||||
    let args = Args::parse();
 | 
			
		||||
 | 
			
		||||
    if args.http {
 | 
			
		||||
        println!("Proxy was enabled");
 | 
			
		||||
        storage_server::main();
 | 
			
		||||
    }
 | 
			
		||||
    println!("Hello, world!");
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								src/storage/interface.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/storage/interface.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
use crate::storage::world::{BlockID, BlockPos};
 | 
			
		||||
 | 
			
		||||
enum StorageInterface {
 | 
			
		||||
    /// `ChangeBlock` changes the block at the world position given by `world_position` to the
 | 
			
		||||
    /// target block id `BlockID`
 | 
			
		||||
    ChangeBlock {
 | 
			
		||||
        target_state: BlockID,
 | 
			
		||||
        world_position: BlockPos,
 | 
			
		||||
    },
 | 
			
		||||
    ChangeBlockRange(BlockID, BlockPos, BlockPos),
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										2
									
								
								src/storage/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								src/storage/mod.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
mod interface;
 | 
			
		||||
mod world;
 | 
			
		||||
							
								
								
									
										32
									
								
								src/storage/world.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/storage/world.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
type ChunkCoordinate = isize;
 | 
			
		||||
 | 
			
		||||
const SECTIONS_PER_CHUNK: usize = 16;
 | 
			
		||||
 | 
			
		||||
struct ChunkData {
 | 
			
		||||
    x: ChunkCoordinate,
 | 
			
		||||
    y: ChunkCoordinate,
 | 
			
		||||
    sections: [ChunkSection; SECTIONS_PER_CHUNK],
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// https://wiki.vg/Chunk_Format
 | 
			
		||||
struct ChunkSection {
 | 
			
		||||
    /// The number of non-empty blocks in the section. If completely full, the
 | 
			
		||||
    /// section contains a 16 x 16 x 16 cube of blocks = 4096 blocks
 | 
			
		||||
    /// If the section is empty, this is skipped
 | 
			
		||||
    block_count: u16,
 | 
			
		||||
    block_states: [BlockID; 4096],
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// `BlockPos` represents the location of a block in world space
 | 
			
		||||
pub struct BlockPos {
 | 
			
		||||
    x: isize,
 | 
			
		||||
    y: isize,
 | 
			
		||||
    z: isize,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// BlockID represents the type of block stored
 | 
			
		||||
#[repr(u8)]
 | 
			
		||||
pub enum BlockID {
 | 
			
		||||
    Empty,
 | 
			
		||||
    Generic,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								src/storage_server.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/storage_server.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
use axum::{routing::get, Router};
 | 
			
		||||
 | 
			
		||||
#[tokio::main]
 | 
			
		||||
pub async fn main() {
 | 
			
		||||
    let app = Router::new().route("/", get(|| async { "Hello World" }));
 | 
			
		||||
 | 
			
		||||
    axum::Server::bind(&"0.0.0.0:5000".parse().unwrap())
 | 
			
		||||
        .serve(app.into_make_service())
 | 
			
		||||
        .await
 | 
			
		||||
        .unwrap();
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user