Wiki 9Minecraft Wiki 9Minecraft

Overwriting Vanilla Assets and Definitions

How Bedrock loads, merges, and replaces vanilla files across stacked resource and behavior packs.

6Sections
3Code examples
3Known errors

Overwriting assets is the process of replacing or modifying built-in Minecraft files by placing a file with the same relative path or identifier into your own Resource Pack (RP) or Behavior Pack (BP). You reach for this technique whenever you want to retexture a vanilla block, alter a mob's AI behavior, swap out a sound effect, or change a loot table without creating a brand-new custom identifier. Understanding which files completely replace one another and which files merge their contents is critical to making packs that work alongside other add-ons.

The Pack Stack and Load Order

Minecraft Bedrock resolves assets and data by assembling a virtual file system from all active packs on a world or in the global settings. At the very bottom of this stack sits the base vanilla pack (along with internal engine packs for newer game updates). Above the vanilla pack sit user-applied packs, ordered from lowest priority at the bottom to highest priority at the top.

When the game requests a resource—whether by its file path or by its internal JSON identifier—it searches from the top of the pack stack downward. For non-merging files like textures and audio, the very first file found at the expected path wins, and anything below it in the stack is ignored. For JSON registry files that support merging, the game loads the bottom-most vanilla file first and sequentially applies keys from higher packs on top of it.

Because the top pack always wins conflicts, the order in which a player arranges their packs in the world settings directly dictates which add-on's changes survive when two packs touch the same vanilla asset.

Binary Assets: Direct Path Replacement

Binary files such as PNG textures, OGG audio files, and font images cannot be merged. To overwrite them, you simply mirror the exact folder structure and filename used by the vanilla Resource Pack. You do not need to edit any JSON definition if your only goal is to swap the visual or audio asset.

For image textures, Bedrock allows format substitution across the same base path. If the vanilla game provides a texture as a `.png`, your pack can supply a `.tga` file with the exact same name and directory path, and the engine will recognize it as a valid override. However, keep the base filename and folder casing identical to the vanilla path, as some platforms treat file paths as case-sensitive.

Asset CategoryVanilla Path ExampleOverride Behavior
Block & Item TexturesRP/textures/blocks/dirt.pngComplete replacement. Matching path and filename replaces the image.
Entity TexturesRP/textures/entity/creeper/creeper.pngComplete replacement. Affects any geometry using that texture path.
SoundsRP/sounds/mob/cow/say1.oggComplete replacement of the individual audio file.
LocalizationRP/texts/en_US.langLine-by-line key merge. Only matching translation keys are overwritten.
UI DefinitionsRP/ui/hud_screen.jsonTop-level UI JSONs merge by element name across the stack.

Identifier-Based Overwrites vs. JSON Merging

For JSON data files, Bedrock uses two different resolution rules depending on the system: identifier-based replacement and path-based key merging. Most modern actor, item, and recipe definitions rely on the `identifier` field inside the JSON rather than the filename itself. If you place a file at `BP/entities/my_custom_zombie_tweak.json` and set its identifier to `minecraft:zombie`, it will completely replace the vanilla `BP/entities/zombie.json` file.

When an identifier-based file is overwritten, it does not merge with the vanilla file. If you define `minecraft:zombie` with only a `minecraft:health` component, your zombie will lose all movement, attack behaviors, collision boxes, and loot drops because you omitted the rest of the vanilla components. To safely modify a vanilla entity, copy the entire vanilla JSON file from the official vanilla template pack first, then edit only the parts you want to change.

In contrast, client entity definitions (`RP/entity/*.json`) and registry files (`RP/textures/terrain_texture.json`, `RP/sounds/sound_definitions.json`) merge or override specific keys. In a client entity file, redefining `minecraft:zombie` allows you to overwrite just the `textures.default` entry or a single animation while leaving the rest of the vanilla client definition intact, provided you match the vanilla `format_version` structure.

RP/entity/zombie.entity.json
{
  "format_version": "1.10.0",
  "minecraft:client_entity": {
    "description": {
      "identifier": "minecraft:zombie",
      "textures": {
        "default": "textures/entity/zombie/custom_zombie"
      }
    }
  }
}

Overwriting Registry and Atlas Files

Certain files act as master registries for the entire Resource Pack, such as `RP/textures/terrain_texture.json`, `RP/textures/item_texture.json`, `RP/blocks.json`, and `RP/sounds/sound_definitions.json`. If these files completely replaced each other, two resource packs could never be used together. Instead, Bedrock merges the top-level JSON objects inside them across all active packs.

When you want to overwrite a single vanilla terrain texture shortname or add a new one, you should only include the specific keys you are changing or adding inside your `terrain_texture.json`. Do not copy the entire multi-thousand-line vanilla file into your pack. Including every vanilla entry bloats your pack and forces your pack to overwrite changes made by any lower-priority pack in the stack.

RP/textures/terrain_texture.json
{
  "resource_pack_name": "vanilla",
  "texture_name": "atlas.terrain",
  "padding": 8,
  "num_mip_levels": 4,
  "texture_data": {
    "stone": {
      "textures": "textures/blocks/my_custom_stone"
    }
  }
}

Modifying Vanilla Loot Tables and Spawn Rules

Loot tables (`BP/loot_tables/`) and trade tables (`BP/trading/`) do not have an `identifier` field inside their JSON structure. Instead, they are referenced directly by their relative file path from within entity behaviors or block definitions. To overwrite the drops of a vanilla creeper, your file must be placed at the exact path `BP/loot_tables/entities/creeper.json`. Like behavior entities, loot tables do not merge pools; your file completely replaces the vanilla table at that path.

Spawn rules (`BP/spawn_rules/`) and recipes (`BP/recipes/`) use internal identifiers under their `description` block. To overwrite a vanilla recipe or spawn rule, your JSON must use the exact `minecraft:` identifier of the target rule or recipe. For recipes specifically, if you want to alter how a vanilla item is crafted, copy the vanilla recipe file, keep its original `description.identifier`, and change the ingredients or result.

BP/loot_tables/entities/creeper.json
{
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "item",
          "name": "minecraft:gunpowder",
          "functions": [
            {
              "function": "set_count",
              "count": {
                "min": 2,
                "max": 4
              }
            }
          ]
        }
      ]
    }
  ]
}

The Vanilla Experimental Pack Trap

Whenever Mojang updates an existing mob or block in a recent version of the game, those changes are frequently shipped inside internal built-in packs (such as `vanilla_1.20.0` or `vanilla_1.21.0`) rather than the base `vanilla` folder. If you extract a template from the base `vanilla` folder to start your overwrite, you might accidentally grab an outdated version of that entity that lacks newer components or animations.

Always inspect the highest versioned internal vanilla folder when copying a vanilla JSON file to modify. Furthermore, make sure the `format_version` in your overwritten file is at least as high as the version used by the latest internal vanilla pack; in several subsystems, the engine ignores an override or parses it with legacy rules if its `format_version` is older than the base game's definition.

Which versions this applies to

Applies to all modern Minecraft Bedrock versions (1.16.0 through 1.21+). No experimental toggles are required to overwrite vanilla assets, loot tables, entities, or recipes.

When it does not work

What you seeWhyThe fix
Vanilla mob stands completely still, takes no damage, or turns invisible after applying a Behavior Pack override.Server-side entity files (BP/entities/) do not merge with vanilla files. Writing a partial JSON with only the one component you wanted to change strips the entity of all other vanilla components.Copy the complete entity JSON from the latest vanilla behavior pack folder first, paste it into your pack, and modify only the specific components you want to alter.
Content Log shows '[Json][error] ... duplicate identifier' or your recipe changes have no effect in-game.You copied a vanilla recipe or entity to make a custom one, or tried to overwrite a vanilla recipe, but gave it a mismatched identifier or loaded two files with the same identifier inside the same pack.Ensure no two files within the same pack share a description.identifier. To overwrite a vanilla recipe, match the exact identifier used in the vanilla recipe file.
Custom textures work when your Resource Pack is used alone, but break other Resource Packs loaded below it.You copied the entire vanilla terrain_texture.json or item_texture.json into your pack instead of only declaring the keys you modified.Delete all unmodified vanilla texture entries from your terrain_texture.json and item_texture.json files so lower packs can still merge their own changes.

Reference, straight from the game files

Read out of the game itself, so the ids match the version you are building for.