Description
# Mobs Use Shields
This mod allows certain mobs to actively use shields in combat instead of only holding them as equipment.
When a compatible mob equips a shield in its offhand, it gains AI behavior that allows it to raise the shield to block incoming attacks, creating short defensive windows before returning to normal combat.
The design goal is to make shield usage feel like a natural extension of vanilla combat, adding defensive moments without turning mobs into permanent blockers.
***
## Features
* Mobs can raise shields to block attacks
* Shielding has a configurable duration and cooldown
* Mobs face their target while blocking
* Shield blocks play proper shield sound effects
* Knockback from blocked hits is reduced
* Humanoid mobs display the correct blocking animation
* Mobs can anticipate certain threats and raise shields preemptively
* Axes can disable mob shields, similar to player shield interactions
* By default, only Husk, Zombie and Wither Skeleton would have a chance to spawn with a shield.
* Users can customize which mobs may spawn with shields
* Users can adjust per-mob shield behavior through data-driven configs
***
## General Configuration
Several global behaviors can be configured:
* `mobConsumeShieldDurability` Whether mobs consume shield durability when blocking.
* `mobAlwaysAnticipate` Forces mobs to always use anticipation logic. If set to `false`, anticipation logic only activates when local difficulty × recent HP loss exceeds a random threshold.
***
## Data Pack Configuration
This mod supports data-driven mob shield configs through JSON files.
You can define:
* whether a mob may spawn with a shield
* the chance that it spawns with one
* the minimum local difficulty required
* which shield item it uses
* how long it keeps blocking
* how long its shield cooldown lasts
* how often it checks whether it should continue blocking
### Folder Structure
Place your JSON files under:
```
data//mob_shield/.json
```
Examples:
```
data/minecraft/mob_shield/zombie.json
data/minecraft/mob_shield/piglin.json
data/yourmod/mob_shield/custom_mob.json
```
These files are resolved by path into entity-type-style ids. For example:
```
data/minecraft/mob_shield/zombie.json -> minecraft:zombie
data/yourmod/mob_shield/foo/bar.json -> yourmod:foo/bar
```
In practice, this means the file path should match the mob id you want to configure.
### Example JSON
```
{
"use_duration": 60,
"cooldown_duration": 60,
"check_continue_to_use_interval": 30,
"shield_id": "minecraft:shield",
"chance": 0.15,
"min_difficulty": 2.25
}
```
### Field Description
* `use_duration` How long the mob keeps actively using the shield.
* `cooldown_duration` How long the mob waits before it can use the shield again.
* `check_continue_to_use_interval` How often the mob checks whether it should continue blocking.
* `shield_id` The item id of the shield to equip when the mob spawns with one. If the item is missing or invalid, the mod falls back to `minecraft:shield`.
* `chance` The spawn chance for that mob to receive a shield in its offhand.
* `min_difficulty` Minimum local difficulty required before the mob may spawn with a shield.
### Notes About Local Difficulty
`min_difficulty` uses Minecraft's effective local difficulty, not just the selected world difficulty setting.
For reference:
* The raw regional difficulty is always 0.0 on Peaceful and ranges from 0.75 to 1.5 on Easy, 1.5 to 4.0 on Normal, and 2.25 to 6.75 on Hard. (ref: [Minecraft Wiki](https://minecraft.wiki/w/Difficulty#Clamped_regional_difficulty))
* lower values allow shield spawning earlier or under easier conditions
* higher values make shielded spawns rarer and more progression-sensitive
***
## Compatibility
Vanilla shield interactions remain unchanged.
* For example, Hoglins and Ravagers still interact with shields using their vanilla mechanics.
Fresh Animations / EMF
* Proper blocking poses can be displayed with Fresh Animations.
* This mod overwrites entity arm poses in the EMF render pipeline while shields are being used.
Spartan Weaponry
* Weapons with the `Shield Breach` trait can disable mob shields, similar to vanilla axes.
***
## Notes
Shield behavior is designed around vanilla-style combat flow, with Zombies serving as the primary reference for timing and pacing.
Because different mobs use different vanilla AI structures, some variation in behavior is expected. Compatibility improvements and edge-case fixes may still be added over time.
If you encounter mobs with unusually broken or inconsistent shield behavior, feel free to report them.
***
## Support
If you'd like to support my modding work, including maintenance, updates, and compatibility work, Patreon is available here: [https://patreon.com/vomiter\_scp](https://patreon.com/vomiter_scp)