Every object in the game is addressed by a dot-separated registry key that combines a namespace, pack name, group, and item ID.

Registry Key Format

<namespace>.<packname>.<group>.<id>

Registry Key Patterns by Content Type

Content TypePatternExample
Materialitems.materials.<pack>.<type>.<id>items.materials.mypack.ores.iron
Equipmentitems.materials.<pack>.<slot>.<id>items.materials.mypack.ship.weapon.basic_weapon
Skillskills.category.<pack>.<category>.<id>skills.category.mypack.crafting.forging
Enemyenemies.<pack>.<group>.<id>enemies.mypack.pirate.raider_frigate
Roomdungeons.<pack>.<group>.<id>dungeons.mypack.pirate.ambush_zone
Dungeondungeons.<pack>.<group>.<id>dungeons.mypack.pirate.pirates_outpost
Reciperecipes.<pack>.<craft_type>.<id>recipes.mypack.forging.iron_ingot
Questquests.<pack>.<id>quests.mypack.my_quest

Rules for Pack Names

  • Lowercase alphanumeric and underscores only
  • No spaces, hyphens, or special characters
  • Must match the datapack folder name exactly

Rules for Item IDs

The Data Helper sanitizes IDs on save: converts to lowercase, replaces any non-alphanumeric/underscore character with _, and strips leading/trailing underscores. Write your IDs to match this format from the start.

Why Registry Keys Matter

Two different packs can both have an item called iron_ore without conflicting, because their registry keys are distinct: items.materials.pack_a.ores.iron_ore vs. items.materials.pack_b.ores.iron_ore. The game tracks everything by its full registry key.

Translation Key Naming

Display name and description keys follow a simple convention:

<registry_key>       โ†’ display name
<registry_key>.desc  โ†’ description

Example:

"displayName": "items.materials.mypack.ores.iron"
"description":  "items.materials.mypack.ores.iron.desc"

These keys appear as raw strings in the UI if a translation is missing โ€” a useful debugging signal.