Item Authoring

Documentation baseline: VoxelCore main at 452b569 · 14 September 2026.
Repository: https://github.com/VoxelHorizons/VoxelCore

Items are declared below an items: mapping in any YAML file beneath a pack's content/ directory.

items:
  gem_base:
    material: minecraft:paper
    bound: false
    lore:
      - A VoxelCore item

  ruby:
    extends: gem_base
    display_name: Ruby
    bound: true
    render:
      model: mypack:item/ruby
      unbreakable: true
      durability: 0
      attributes:
        hide_attributes: true
      custom_model_data: 1001
    properties:
      category: gemstone

Supported fields

The current item schema accepts:

  • extends
  • type
  • material
  • display_name
  • lore
  • bound
  • render
  • properties

Unknown keys are errors.

ContentID

The key is combined with the pack namespace to form a stable ID:

mypack:ruby

IDs are normalised to lowercase and namespace/value segments use [a-z0-9._-]+. File paths do not become part of the ID.

bound

bound is a compiled boolean field and defaults to false when it is not supplied/inherited. As of PR #16, /voxelcore admin item list only shows definitions with bound: true. This makes bound: false useful for inheritance-only/base definitions without losing them from the compiled registry.

Do not infer more from this flag than the implementation guarantees: unbound definitions still exist in the registry and can be referenced/inspected.

properties

properties is a structured author-owned map. Parent/child maps deep-merge and compiled nested structures are deep-frozen so runtime definitions do not expose mutable nested state.

Rendering fields

Rendering is deliberately separate from ContentID and is covered in Products/Voxel-Horizons/VoxelCore/Rendering-and-Models.

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