# Resource Pack Compiler


> **Documentation baseline:** VoxelCore `main` at `452b569` ยท 14 September 2026.  
> **Repository:** [https://github.com/VoxelHorizons/VoxelCore](https://github.com/VoxelHorizons/VoxelCore)


`voxelcore-pack` compiles authored assets plus the active render-allocation authority into deterministic Java resource-pack ZIP files.

## Exact pack targets

| Target | Mode | Pack metadata format |
|---|---|---:|
| `mc-1.12.2` | legacy durability/damage predicate | 3 |
| `mc-1.13.2` | legacy durability/damage predicate | 4 |
| `mc-1.14.4` | numeric Custom Model Data | 4 |
| `mc-1.19.4` | numeric Custom Model Data | 13 |
| `mc-1.20.5` | numeric Custom Model Data | 32 |
| `mc-1.21.4` | modern item-model / structured CMD | 46 |
| `mc-26.2` | modern item-model / structured CMD | **88.0** |

The 26.2 target uses modern `pack.mcmeta` range metadata (`min_format` and `max_format`) rather than the legacy `pack_format` shape used by older targets.

## Build output

Runtime pack builds are written to:

```text
plugins/VoxelCore/build/resource-packs/<target>.zip
```

Use:

```text
/voxelcore admin pack validate [target]
/voxelcore admin pack build [target]
```

If the target is omitted, VoxelCore only auto-selects when the current server version has an **exact** registered pack target. Otherwise the command asks for an explicit target.

## Determinism

The compiler writes sorted entries with fixed ZIP metadata so identical authoring + allocation state produces identical archive bytes. This improves reproducibility and makes generated differences meaningful.

## Shared allocation authority

Runtime item creation and pack compilation both use `render-allocations.yml`. Numeric CMD values and structured semantic-key indices therefore cannot independently drift between server-side stacks and the generated pack.

## Asset validation

Compiler validation checks model ownership/dependencies and required authored model assets. Generated Minecraft glue is written to build output; it is not expected to be manually authored inside a content pack.
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9