Naming & IDs
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 Type | Pattern | Example |
|---|---|---|
| Material | items.materials.<pack>.<type>.<id> | items.materials.mypack.ores.iron |
| Equipment | items.materials.<pack>.<slot>.<id> | items.materials.mypack.ship.weapon.basic_weapon |
| Skill | skills.category.<pack>.<category>.<id> | skills.category.mypack.crafting.forging |
| Enemy | enemies.<pack>.<group>.<id> | enemies.mypack.pirate.raider_frigate |
| Room | dungeons.<pack>.<group>.<id> | dungeons.mypack.pirate.ambush_zone |
| Dungeon | dungeons.<pack>.<group>.<id> | dungeons.mypack.pirate.pirates_outpost |
| Recipe | recipes.<pack>.<craft_type>.<id> | recipes.mypack.forging.iron_ingot |
| Quest | quests.<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.