Override Types
BHL supports four override target types for both block and tool overrides. Each type determines how the target field is matched against the game's registries.
block / item — Direct ID
Matches a single block or item by its full registry ID.
Block override example:
{
"target": "minecraft:obsidian",
"type": "block",
"requiredTier": "diamond"
}
Tool override example:
{
"target": "minecraft:iron_pickaxe",
"type": "item",
"tier": "iron"
}
Use block in blocks.json files and item in tools.json files. The target must be a valid namespaced ID (namespace:path).
tag — Block/Item Tags
Matches all blocks or items in a given tag. Prefix the tag name with #.
Block override example:
{
"target": "#minecraft:needs_iron_tool",
"type": "tag",
"requiredTier": "iron"
}
Tool override example:
{
"target": "#forge:tools/pickaxes",
"type": "tag",
"tier": "iron"
}
Tag overrides are resolved after datapacks load, so they pick up tags added by other mods and datapacks. This is the most compatible way to target groups of blocks or tools.
mod — Mod Namespace
Matches all blocks or items registered under a mod's namespace.
Block override example:
{
"target": "create",
"type": "mod",
"requiredTier": "iron"
}
This applies to every block registered by the Create mod (create:*).
Tool override example:
{
"target": "tinkersconstruct",
"type": "mod",
"tier": "iron"
}
The target is just the namespace — do not include the colon or path. For example, use "create", not "create:" or "create:*".
regex — Pattern Matching
Matches blocks or items whose registry ID matches a Java regex pattern.
Block override example:
{
"target": "create:.*_ore",
"type": "regex",
"requiredTier": "iron"
}
This matches any Create block whose path ends with _ore (e.g., create:zinc_ore, create:deepslate_zinc_ore).
Tool override example:
{
"target": ".*:.*_sword",
"type": "regex",
"tier": "iron"
}
This matches any sword item from any mod.
Regex patterns are matched against the full registry ID (namespace:path). Be careful with broad patterns — test with /bhl check to verify matches.
Priority Order
When multiple overrides match the same block or item, the most specific match wins:
- block/item (direct ID) — highest priority
- tag
- regex
- mod (namespace) — lowest priority
Within the same type, overrides from layered files (blocks_*.json) are processed alphabetically after the base blocks.json.