World Engine & Formats
The world engine is managed primarily within the pumpkin-world crate. It handles world storage formats, chunk reading and writing, terrain generation, lighting calculations, and block ticking.
Supported World Formats
Pumpkin is designed to support multiple region and world formats, giving server administrators flexibility between vanilla compatibility and modern high-performance compression.
1. Anvil File Format (.mca)
The Anvil format is the standard format used by vanilla Minecraft: Java Edition.
- Structure: Chunks are grouped into 32×32 chunk regions stored in
.mcafiles (r.{x}.{z}.mca). - Data Layers: Each chunk contains block state palettes, biome palettes, heightmaps, tile entities, and light arrays.
- Compression: Individual chunks within the region file are compressed using ZLib or LZ4.
- Support: Pumpkin supports both loading and saving Anvil region files.
2. Linear Region Format (.linear)
Linear is a modern alternative to Anvil that drastically reduces world save sizes and speeds up disk I/O by utilizing Zstandard (zstd) compression across the entire region rather than per-chunk zlib blocks.
- Savings: Reduces disk usage by ~50% in the Overworld and Nether, and up to ~95% in the End.
- Performance: High decompression speeds and reduced disk writes make it ideal for high-throughput production servers.
- Support: Native read/write support is built into
pumpkin-world.
3. Slime World Format (.slime)
Originally developed by Hypixel, the Slime format packages entire worlds into a single, compact, easily duplicable binary file. It is optimized for minigames and temporary instance-based worlds.
4. Pump Format
Pumpkin's native chunk storage format designed specifically for rapid serialization without the legacy overhead of the Anvil format.
The world engine organizes chunk management and ticking into hierarchical layers:
Hierarchy
World: Manages dimensions (overworld,the_nether,the_end), coordinates players within that dimension, and broadcasts updates.Level: The core data structure holding chunk tables, height bounds (-64 to 320 for vanilla 1.18+ worlds), block registries, and tick schedulers.Chunker: Manages view distances and player subscriptions. UsesCylindricalChunkIteratorto compute which chunks to stream to players as they move.
Asynchronous Chunk Pipeline
To maintain steady 20 TPS tick rates:
- Chunks requested by players are checked in the memory cache.
- Uncached chunks are loaded from disk or generated via Rayon background tasks without stalling the main game tick loop.
- Completed chunks are dispatched through asynchronous channels to the player's connection stream.
World Generation Pipeline
When a world does not yet have saved chunks, or when players explore past generated boundaries, Pumpkin generates new chunks through a 6-stage pipeline:
- Noise Routers: Multi-octave 3D Perlin and Simplex noise algorithms compute continentalness, erosion, and peaks/valleys.
- Density Shaping: Transforms continuous 3D noise values into terrain density and solid vs. air voxel thresholds.
- Biome Climate Mapping: Samples temperature, humidity, continentalness, and erosion to assign biome IDs.
- Surface Rules: Evaluates layered rules to place grass, dirt, sand, sandstone, or deepslate depending on exposure and altitude.
- Carvers: Carves 3D cave tunnels, ravines, and aquifers into solid rock.
- Features & Decoration: Places ore veins, vegetation, trees, structures, and surface foliage.
1. Noise Routers & Density Functions
Pumpkin implements Minecraft's multi-octave 3D Perlin and Simplex noise algorithms:
- Calculates continentalness, erosion, peaks & valleys, and 3D density.
- Generates natural terrain shapes including overhangs, floating islands, mountains, and deep caves.
2. Biome Climate Parameters
Biomes are resolved dynamically based on multi-dimensional climate coordinates:
- Temperature
- Humidity
- Continentalness
- Erosion
- Depth
- Weirdness
The parameters match vanilla Minecraft biome palettes and generate smooth biome transitions.
3. Generators
- Vanilla-like Terrain Generator: Full 3D noise generation matching modern Minecraft world limits (Y = -64 to Y = 320).
- Superflat Generator: Configurable flat layers (e.g., Bedrock at Y=-64, Dirt, Grass Block top layer).
Lighting & Ticking
1. Lighting Engine
- Block Light: Propagated dynamically from light-emitting blocks (torches, glowstone, lava) up to level 15.
- Sky Light: Propagated vertically from the sky down through transparent and semi-transparent blocks (leaves, water).
- Light arrays are computed and serialized into clientbound chunk packets so clients render accurate shadows.
2. Block & Chunk Ticking
- Scheduled Ticks: Blocks requesting delayed execution (water flow, falling sand, redstone repeaters).
- Random Ticks: Random blocks selected per sub-chunk each tick to simulate plant growth, ice melting, and crop maturation.