-
Notifications
You must be signed in to change notification settings - Fork 0
Mob Overrides
Mob overrides allow you to customize leveling behavior for specific mob types within structure or biome rules. This gives you fine-grained control over individual mobs.
Mob overrides are nested inside structure or biome rule files:
{
"structure": "minecraft:stronghold",
"mob_overrides": {
"minecraft:zombie": {
// Override settings for zombies
},
"minecraft:skeleton": {
// Override settings for skeletons
}
}
}| Field | Type | Default | Description |
|---|---|---|---|
fixed_level |
Integer | null |
Exact level for this mob type |
level_bonus |
Integer | null |
Add to calculated level |
min_level |
Integer | null |
Minimum level for this mob |
max_level |
Integer | null |
Maximum level for this mob |
level_range |
Object | null |
Alternative way to set min/max |
ignore_level_cap |
Boolean | false |
Bypass global level cap |
can_attack |
Boolean | null |
Enable combat for passive mobs |
attribute_multipliers |
Object | {} |
Multiply attribute bonuses |
attribute_scaling |
Object | {} |
Custom attribute scaling |
Give zombies in strongholds a fixed level of 200:
{
"structure": "minecraft:stronghold",
"mob_overrides": {
"minecraft:zombie": {
"fixed_level": 200
}
}
}level_bonus adds levels on top of whatever the rule calculates (distance, random, or fixed). The base level is worked out and clamped to the rule's level_range first, then the bonus is added — so the bonus genuinely stacks instead of being swallowed by max_level.
{
"structure": "minecraft:stronghold",
"level_mode": "random",
"level_range": {
"min": 50,
"max": 100
},
"mob_overrides": {
"minecraft:skeleton": {
"level_bonus": 50,
"ignore_level_cap": true
}
}
}A skeleton that would be level 75 becomes level 125.
⚠️ The global level cap still applies. The result oflevel_bonusis clamped toglobalLevelCap(config, default 100) unless you set"ignore_level_cap": trueon the override (as above) or raiseglobalLevelCap. Without one of those,75 + 50is capped back down to 100. This is the most common reason alevel_bonus"doesn't seem to do anything."
Restrict specific mobs to a different level range:
{
"biome": "minecraft:desert",
"level_range": {
"min": 10,
"max": 50
},
"mob_overrides": {
"minecraft:husk": {
"level_range": {
"min": 80,
"max": 120
}
}
}
}Or use individual fields:
{
"mob_overrides": {
"minecraft:husk": {
"min_level": 80,
"max_level": 120
}
}
}By default, all levels are capped by globalLevelCap in the config. Override this per-mob:
{
"mob_overrides": {
"minecraft:warden": {
"fixed_level": 9999,
"ignore_level_cap": true
}
}
}A very common goal: "keep normal distance scaling for everything, but make certain modded mobs/bosses much stronger — without buffing weak mobs too."
Don't crank the shared rule's numbers (that buffs everything). Instead attach a per-mob override to a catch-all base rule (or a biome/dimension rule) and give just those mobs a level_bonus plus a steeper attribute_scaling. The override can also widen its own max_level so the bonus isn't clamped by the parent rule's range — only the listed mob is affected.
// data/<your_pack>/data/botzmobleveling/mob_levels/base/cata_bosses.json
{
"priority": 50,
"enabled": true,
"level_mode": "distance",
"level_range": { "min": 1, "max": 100 },
"mob_overrides": {
"cataclysm:ignis": {
"level_bonus": 50,
"max_level": 300,
"ignore_level_cap": true,
"attribute_scaling": {
"minecraft:generic.max_health": {
"base_bonus": 0.0,
"per_level": 0.06,
"operation": "multiply_base"
},
"minecraft:generic.attack_damage": {
"base_bonus": 0.0,
"per_level": 0.04,
"operation": "multiply_base"
}
}
}
}
}What this does:
- Every overworld mob still levels by distance, 1–100, with the normal scaling.
-
Only
cataclysm:ignisgets its level pushed +50 above the surrounding mobs, can climb past 100 (its ownmax_levelis 300, andignore_level_caplets it bypass the global cap), and uses a stronger percentage-based health/damage curve. - No other mob is touched.
Note for altar-/ritual-summoned mobs (e.g. Cataclysm bosses): these don't spawn as part of a structure, so a
structuresfilter (in either a structure rule or a boss rule) will never match them — the mob isn't standing inside a registered structure piece when it appears. Use a base/biome/dimension rule with amob_overridesentry (like above) for guaranteed, location-independent scaling, rather than a structure rule.
Enable passive mobs to fight back when attacked:
{
"structure": "minecraft:stronghold",
"mob_overrides": {
"minecraft:chicken": {
"fixed_level": 500,
"can_attack": true
}
}
}When can_attack is enabled:
- The passive mob gains melee attack AI
- When attacked, it will target the attacker
- Attack damage scales with level
- The mob remembers who hurt it
| Value | Behavior |
|---|---|
true |
Mob can attack when provoked |
false |
Mob cannot attack (even if config enables it) |
null (default) |
Use global config setting |
Global config setting: leveledPassivesCanAttack
Multiply the base attribute bonuses for specific mobs:
{
"mob_overrides": {
"minecraft:zombie": {
"attribute_multipliers": {
"minecraft:generic.max_health": 2.0,
"minecraft:generic.attack_damage": 1.5
}
}
}
}This multiplies the bonuses from the parent rule's attribute_scaling.
Completely override attribute scaling for specific mobs:
{
"mob_overrides": {
"minecraft:skeleton": {
"attribute_scaling": {
"minecraft:generic.max_health": {
"base_bonus": 100.0,
"per_level": 2.0,
"operation": "addition",
"max_bonus": 1000.0
},
"minecraft:generic.attack_damage": {
"base_bonus": 5.0,
"per_level": 0.1,
"operation": "addition"
}
}
}
}
}{
"structure": "minecraft:stronghold",
"priority": 100,
"level_mode": "random",
"level_range": {
"min": 50,
"max": 100
},
"mob_overrides": {
"minecraft:zombie": {
"fixed_level": 200,
"ignore_level_cap": true,
"attribute_scaling": {
"minecraft:generic.max_health": {
"base_bonus": 200.0,
"per_level": 1.0,
"operation": "addition"
},
"minecraft:generic.attack_damage": {
"base_bonus": 10.0,
"per_level": 0.2,
"operation": "addition"
},
"minecraft:generic.armor": {
"base_bonus": 10.0,
"per_level": 0.1,
"operation": "addition"
}
}
}
}
}{
"structure": "minecraft:village_plains",
"priority": 80,
"mob_overrides": {
"minecraft:chicken": {
"fixed_level": 50,
"can_attack": true,
"attribute_scaling": {
"minecraft:generic.attack_damage": {
"base_bonus": 2.0,
"per_level": 0.1,
"operation": "addition"
}
}
},
"minecraft:cow": {
"fixed_level": 75,
"can_attack": true,
"attribute_scaling": {
"minecraft:generic.attack_damage": {
"base_bonus": 4.0,
"per_level": 0.2,
"operation": "addition"
}
}
},
"minecraft:pig": {
"fixed_level": 60,
"can_attack": true
}
}
}{
"biome_tags": ["minecraft:is_nether"],
"priority": 60,
"level_mode": "distance",
"level_range": {
"min": 30,
"max": 100
},
"mob_overrides": {
"minecraft:blaze": {
"level_bonus": 20,
"attribute_multipliers": {
"minecraft:generic.max_health": 1.5
}
},
"minecraft:wither_skeleton": {
"level_bonus": 30,
"attribute_multipliers": {
"minecraft:generic.max_health": 2.0,
"minecraft:generic.attack_damage": 1.5
}
},
"minecraft:ghast": {
"fixed_level": 150,
"ignore_level_cap": true
}
}
}By default, passive mobs don't receive levels. To level passive mobs:
- Add them to
mob_overrides - The presence in
mob_overridesallows them to be leveled - Only mobs explicitly listed will be affected
{
"structure": "minecraft:stronghold",
"mob_overrides": {
"minecraft:chicken": {
"fixed_level": 100
}
}
}Important: Without an explicit mob_overrides entry, passive mobs remain level 0.
- Mob override
fixed_leveltakes absolute priority (skips range + bonus) - Mob override level range overrides the parent range
- The base level is calculated and clamped to the range
-
level_bonusis then added on top of the clamped level - The global level cap is applied last (unless
ignore_level_capis set) -
attribute_scalingreplaces parent scaling;attribute_multipliersmultiply it
- Use fixed levels for signature mobs in dungeons
- Use level_bonus for slight variations
- Enable can_attack sparingly for surprise difficulty
- Attribute multipliers are simpler than full scaling
- Test with debug mode to verify correct application
Navigation
Quick Links