// Core type definitions for Minecraft Clone // ============ BLOCK TYPES ============ export enum BlockFace { BOTTOM = 0, TOP = 1, NORTH = 2, SOUTH = 3, WEST = 4, EAST = 5, } export interface BlockState { id: number; properties: Record; } // ============ CHUNK TYPES ============ export interface ChunkPosition { x: number; z: number; } export interface ChunkData { position: ChunkPosition; blocks: Uint8Array; // CHUNK_WIDTH * CHUNK_HEIGHT * CHUNK_DEPTH heightMap: Uint16Array; // CHUNK_WIDTH * CHUNK_DEPTH dirty: boolean; meshVersion: number; } // ============ ITEM TYPES ============ export interface ItemStack { id: number; count: number; damage: number; nbt?: Record; } // ============ ENTITY TYPES ============ export interface Entity { id: string; uuid: string; position: [number, number, number]; velocity: [number, number, number]; rotation: [number, number]; // yaw, pitch health: number; maxHealth: number; onGround: boolean; } // ============ PLAYER TYPES ============ export interface PlayerInventory { hotbar: (ItemStack | null)[]; main: (ItemStack | null)[]; armor: (ItemStack | null)[]; offhand: ItemStack | null; } export interface Player extends Entity { gamemode: 'survival' | 'creative' | 'adventure' | 'spectator'; inventory: PlayerInventory; selectedSlot: number; foodLevel: number; saturation: number; experience: number; experienceLevel: number; flying: boolean; sneaking: boolean; sprinting: boolean; } // ============ WORLD TYPES ============ export interface WeatherState { raining: boolean; thundering: boolean; rainTime: number; thunderTime: number; } export interface World { seed: number; time: number; // 0-24000 gameTime: number; spawnPoint: [number, number, number]; weather: WeatherState; dimension: 'overworld' | 'nether' | 'end'; } // ============ BIOME TYPES ============ export interface Biome { id: number; name: string; temperature: number; moisture: number; depth: number; scale: number; grassColor: string; foliageColor: string; waterColor: string; } // ============ VERTEX TYPES ============ export interface ChunkVertex { position: [number, number, number]; normal: [number, number, number]; uv: [number, number]; ao: number; // ambient occlusion light: number; // light level 0-15 } export interface ChunkMeshData { vertices: Float32Array; indices: Uint32Array; normals: Float32Array; uvs: Float32Array; colors: Float32Array; ao: Float32Array; }