Skip to content

Code Generation (pumpkin-codegen)

Minecraft is a massive game with thousands of block states, items, packet IDs, sound events, recipes, and biome parameters. These registries frequently change between Minecraft updates.

To maintain 100% fidelity without manually maintaining tens of thousands of error-prone constants, Pumpkin utilizes an automated code generation tool: tools/pumpkin-codegen.


Purpose & Workflow

pumpkin-codegen parses official Minecraft server data generator reports, asset files, and version specifications, and outputs zero-cost, strongly-typed Rust files directly into crates/pumpkin-data.

The pipeline operates in three distinct stages:

  1. Ingestion: Reads raw JSON assets and vanilla server reports from assets/ and assets/datapacks/.
  2. Transformation: Normalizes states, calculates bitsets, processes ViaVersion remappings, and optimizes lookup tables.
  3. Emission: Emits compiled Rust constants and structs into crates/pumpkin-data/src/generated.

Generated Datasets

pumpkin-codegen generates the following components in pumpkin-data:

CategoryDescriptionGenerated Source
PacketsServerbound and clientbound packet IDs for all protocol states across supported Minecraft versions.packet.rs
BlocksBlock definitions, default states, state properties (facing, powered, waterlogged, etc.), and block collision boxes.block.rs
ItemsItem definitions, stack sizes, durability, data components, food properties, and equipment slots.item.rs
RegistriesDynamic registries for biomes, dimensions, chat types, damage types, trim materials, and banner patterns.registry.rs
Biomes & NoiseClimate parameters, noise router configurations, 3D noise settings, and surface rules.biome.rs, noise_router.rs
EntitiesEntity types, default bounding boxes, attributes, and tracked entity metadata schemas.entity_type.rs, tracked_data.rs
Recipes & CraftingShaped, shapeless, smelting, blasting, smoking, and stonecutting recipes.recipes.rs
TagsBlock tags, item tags, fluid tags, and entity type tags (e.g., #minecraft:mineable/pickaxe).tag.rs
Enchantments & PotionsEnchantment definitions, potion effects, and brewing stand recipes.enchantments.rs, potion.rs
TranslationsOfficial localization keys for chat messages and item names.translations.rs
Plugin WITWebAssembly Component Model WIT files defining plugin interfaces.wit/

Running Code Generation

To run the code generator locally:

bash
# Navigate to the workspace root
cd Pumpkin

# Run the codegen tool
cargo run -p pumpkin-codegen

When Should You Run Codegen?

  • Upgrading to a New Minecraft Version: When porting Pumpkin to a new minor or major Minecraft release.
  • Adding Protocol Mappings: When adding support for an older or newer client protocol version.
  • Updating WIT Definitions: When adding new functions or types to the WebAssembly plugin API.

Data Sources

pumpkin-codegen reads data from several primary sources:

  1. Minecraft Data Generator Reports: Generated by running java -DbundlerMainClass=net.minecraft.data.Main -jar server.jar --reports.
  2. Minecraft Client Assets: Extracted from client .jar files for translation keys, model shapes, and sound mappings.
  3. Minecraft Protocol Wiki: Cross-referenced with protocol specifications for packet IDs.

Uitgebracht onder de MIT-licentie.