Resource location

Resource locations (also known as namespaced IDs, namespaced identifiers, resource identifiers, or namespaced strings ) are a way to declare and specify game objects in Minecraft, which can identify built-in and user-defined objects without potential ambiguity or conflicts.

Introduction
Resource locations are used as plain strings to reference blocks, items, entity types, and various other objects in vanilla Minecraft.

A valid resource location has a format of, where only certain characters can be used.

Java Edition
The namespace and the path of a resource location should only contain the following symbols:


 * Numbers
 * Lowercase letters
 * Underscore
 * Hyphen/minus
 * Dot

The following characters are illegal in the namespace, but acceptable in the path:
 * Forward slash (directory separator)

The preferred naming convention for either namespace or path is.

Bedrock Edition
The namespace and the path of an namespaced ID can contain all symbols with the exception of slashes and colons.

The following characters are illegal in the namespace, but acceptable in the path of loot tables and functions.
 * Forward slash (directory separator)

The preferred naming convention for either namespace or path is.

Conversion to string
A resource location would be converted to a string by appending its namespace with a  (colon) and its path.

Examples:

Conversion from string
Unlike that, resource locations can always be converted to strings; some strings cannot be converted to resource locations.

A few restrictions:
 * The string can have at most one  (colon) character
 * The rest of the string must fulfill the requirement for legal characters

When the  is present, the part of the string before the   becomes the namespace, and that after the   becomes the path.

$$, and in some cases $$, when the  is absent,   becomes the namespace and the whole string becomes the path.

It is recommended to always include a  in the string format of resource locations.


 * Examples

Usage
Here list places that use resource locations:

Registries and registry objescts
Each registry and each object in registries has resource location to respesent it.

The following is the list of registries and their resource location:


 * Root Registry：
 * Attribute:
 * Block:
 * Block entity type:
 * Chunk status:
 * Dimension and Level stem:
 * Dimension type:
 * Enchantment:
 * Entity type:
 * Fluid:
 * Game event:
 * Position source type (used by game events):
 * Item:
 * Menu type:
 * Mob effect:
 * Particle type:
 * Potion:
 * Recipe serializer:
 * Recipe type:
 * Sound event:
 * Statistics type:
 * Custom Statistics:
 * Entity data registries
 * Entity schedule activity:
 * Entity memory module type:
 * Entity schedule:
 * Entity AI Sensor type:
 * Painting motive:
 * Villager profession:
 * Villager type:
 * Poi Type:
 * Loot table serializer registries:
 * Loot condition type:
 * Loot function type:
 * Loot nbt provider type:
 * Loot number provider type:
 * Loot pool entry type:
 * Loot score provider type:
 * Json file value provider registries:
 * Float provider type:
 * Int provider type:
 * Height provider type:
 * Block predicate type:
 * World generator registries:
 * Structure featrue rule test type:
 * Structure featrue position rule test type:
 * Noise generator settings:
 * World carver:
 * Configured world carver:
 * Feature:
 * Configured feature:
 * Structure set:
 * Structure processor type:
 * Structure processor list:
 * Structure pool element type:
 * Structure template pool:
 * Structure piece type:
 * Structure feature:
 * Configured structure feature:
 * Placed feature:
 * Structure placement type:
 * Placement Modifier Type:
 * Biome:
 * Biome source:
 * Normal noise:
 * Density function:
 * Density function type:
 * Chunk generator:
 * Surface condition source:
 * Surface rule source:
 * Block state provider type:
 * Foliage placer type:
 * Trunk placer type:
 * Tree decorator type:
 * Feature size type:

Pack contents
Resource locations are also used to represent files' paths in data pack or resource pack.


 * Data pack
 * Tags
 * Advancements
 * Recipes
 * Predicates
 * Loot tables
 * Item modifier
 * Functions
 * Structure files
 * Dimensions
 * Dimension types
 * World generator contents
 * Biomes
 * Configured carvers
 * Configured features
 * Configured structure features
 * Configured surface builders
 * Noise settings
 * Placed features
 * Structures
 * Structure sets
 * Processor lists
 * Template pools
 * Noise
 * Noise generator settings
 * Density functions
 * Flat level generator presets
 * World presets


 * Resource pack
 * Block states
 * Models
 * Textures
 * Sounds
 * Fonts
 * Font resource files
 * Particles
 * shaders

Locating contents in packs
Given objects from resource packs and data packs are files, the resource locations represent corresponding paths.

Though the locations vary by object type and the pack type the object type belongs to, there is a pattern to follow. In general, the location is in the fashion of pack_type/namespace/object_type/name.suffix, where all the / (forward slash) symbol (may be part of object_type or name) is replaced by operating system-dependent directory separator.

Given the type of content we want to locate, we can find out the corresponding, , and. Then, we can substitute in and find out the final file location of the content.

Examples

Other contents

 * Customizable contents
 * Boss bars
 * Command storages


 * Other hardcoded contents
 * Cat types for predicates (e.g. textures/entity/cat/tabby.png, textures/entity/cat/jellie.png)
 * Criteria triggers
 * Item properties (i.e. item predicates in models. e.g. angle, custom_model_data)
 * Loot context param sets (i.e. types of loot table. e.g. barter, generic)
 * Unaccessible contents:
 * Command argument types
 * Suggestion providers for autocompletion of commands (e.g. summonable_entities, all_recipes)
 * Model layer location for entity model (e.g. this_entity, origin, tool)
 * Loot context params (e.g. this_entity, origin, tool)

Bedrock edition

 * Built-in content
 * Attributes
 * Status effects
 * Enchantments
 * Sound events
 * Components and Json schemata for addons


 * Behavior pack contents
 * Blocks
 * Entities
 * Items
 * Biomes
 * Loot tables
 * Functions
 * Spawn rules
 * Features
 * Fog settings
 * Particles
 * Volumes
 * Recipes
 * Gametests


 * Resource pack contents
 * Cameras


 * Others
 * Structures

Namespaces
"This isn't a new concept, but I thought I should reiterate what a "namespace" is. Most things in the game has a namespace, so that if we add and a mod (or map, or whatever) adds, they're both different s. Whenever you're asked to name something, for example a loot table, you're expected to also provide what namespace that thing comes from. If you don't specify the namespace, we default to . This means that and  are the same thing."

- Dinnerbone

A namespace is a domain for content. It is to prevent potential content conflicts or unintentional overrides of objects of the same name.

For example, two data packs add two minigame mechanisms to Minecraft; both have a function named start. Without namespaces, these two functions would clash and the minigames would be broken. When they have different namespaces of minigame_one and minigame_two, the functions would become minigame_one:start and minigame_two:start, which no longer conflict.

minecraft namespace
Minecraft reserves the minecraft namespace; when a namespace is not specified, a resource location falls back to minecraft‌. As a result, the minecraft namespace should only be used by content creators when the content needs to overwrite or modify existing Minecraft data, such as adding a function to the minecraft:load function tag.

Custom namespace
The namespace should be distinct for different projects or content creations (e.g. a data pack, a resource pack, a mod, backing data/resource packs for a custom map, etc.)

To prevent potential clashes, the namespace should be as specific as possible.


 * Avoid alphabet soups. For example, a project named "nuclear craft" should not use the namespace, as this is too ambiguous.
 * Avoid words that are too vague.  would not be informative to look up as well, but   would be much better.

In either case, these poorly chosen namespaces reduce the exposure of a project and bring difficulties for debugging when there are multiple content creations applied to the game.

Other built-in namespaces
The vanilla Minecraft resource pack declares Realms-oriented language files in the realms namespace (located at assets/realms/lang/.json) and game-related language files in the minecraft namespace, even though translation keys are not resource locations. The realms jar itself also declares its en_us.json language file and its various textures in the realms namespace.

In the IDs of command argument types, a brigadier namespace also appears for command argument types that are native to Brigadier.