English
Components Reference
The keys available under the components section, what each key accepts, and what it does are listed below. Fields under the components section are mapped directly to Minecraft entity attributes or data components by ComponentMapper. Key names must match the tables below exactly: keys with no handler are skipped silently (no error, no log line)
Shipped examples: the mobs/example_zombie.yml released on first start plus the bundled mobs/elite_zombie.yml and mobs/bone_lord.yml all use the fields below, so you can read the examples alongside them
"Required" is always "No" below — the whole components section may be omitted, and a key that is not written is never applied. "Default" is always "—", meaning the vanilla or existing entity state is kept. An accepted value of "—" means the source performs no validation (numbers are written as-is and out-of-range behaviour is decided by the vanilla attribute/entity API)
Spawn versus refresh semantics
- Applied on spawn only:
absorption,freeze_ticks,fire_ticks,potion_effect, and every equipment field (helmet,chestplate,leggings,boots,main_hand,off_hand,equipment). These are consumable states, so the refresh triggered by/emakimobs reloadnever resets them and never restores broken or removed gear max_healthis special: on spawn the ceiling is applied and health is filled to it; on refresh the current health is kept and clamped to the new ceiling (raising the ceiling does not heal, lowering it clamps health)- Every other component (attribute and appearance/behaviour fields) is written again on every refresh
Attribute fields
| Field | Type | Required | Default | Accepted values | Description |
|---|---|---|---|---|---|
max_health | double | No | — | — | Maximum health (MAX_HEALTH attribute) |
movement_speed | double | No | — | — | Movement speed (vanilla zombie ≈ 0.23, player 0.1) |
attack_damage | double | No | — | — | Melee attack damage |
attack_speed | double | No | — | — | Attack speed |
attack_knockback | double | No | — | — | Knockback strength applied on hit |
follow_range | double | No | — | — (blocks) | Maximum target tracking distance |
knockback_resistance | double | No | — | 0.0–1.0 (vanilla attribute range) | Knockback resistance; 1.0 is full immunity |
armor | double | No | — | — | Armor value |
armor_toughness | double | No | — | — | Armor toughness |
luck | double | No | — | — | Luck value |
flying_speed | double | No | — | — | Flying speed (flying mobs only) |
scale | double | No | — | — | Render scale multiplier; 1.0 is vanilla size |
step_height | double | No | — | — | Block height the mob can step onto directly |
jump_strength | double | No | — | — | Jump strength (rideable mobs such as horses) |
safe_fall_distance | double | No | — | — | Fall distance that causes no damage |
fall_damage_multiplier | double | No | — | — | Fall damage multiplier |
burning_time | double | No | — | — | Burn duration multiplier once ignited |
explosion_knockback_resistance | double | No | — | — | Explosion knockback resistance |
spawn_reinforcements | double | No | — | 0.0–1.0 (vanilla attribute range) | Zombie reinforcement call chance |
oxygen_bonus | double | No | — | — | Underwater breathing bonus |
water_movement_efficiency | double | No | — | — | Movement efficiency in water |
movement_efficiency | double | No | — | — | Movement efficiency on ground |
NOTE
All of the above are vanilla entity attributes. An entry is ignored when the attribute does not exist on the target entity (writing flying_speed onto a zombie, for example)
Appearance and behavior fields
| Field | Type | Required | Default | Accepted values | Description |
|---|---|---|---|---|---|
custom_name | string | No | — | any string | Entity display name; supports MiniMessage format. Unlike display_name, this really rewrites the name tag |
custom_name_visible | boolean | No | — | true / false | When true, name tag is always visible; when false, it only shows on hover |
persistent | boolean | No | — | true / false | Prevent natural despawn when no players are nearby |
silent | boolean | No | — | true / false | Suppress the mob's sounds |
invulnerable | boolean | No | — | true / false | Immune to all damage |
no_ai | boolean | No | — | true / false | true disables AI (the mob stops moving and attacking) |
glowing | boolean | No | — | true / false | Show outline glow effect |
gravity | boolean | No | — | true / false | Whether the mob is affected by gravity |
collidable | boolean | No | — | true / false | Whether the mob takes part in entity collision (pushing) |
fire_immune | boolean | No | — | true / false | Fire-damage immunity; when true a PDC flag is set and combustion plus fire/lava damage events are cancelled |
visual_fire | boolean | No | — | true / false | Force the burning visual effect without dealing fire damage |
absorption | double | No | — | — (points) | Initial absorption amount (yellow hearts). (Applied on spawn only) |
freeze_ticks | int | No | — | — (ticks) | Initial freeze duration (powder snow effect). (Applied on spawn only) |
fire_ticks | int | No | — | — (ticks) | Initial fire duration in ticks. (Applied on spawn only) |
Loot fields
| Field | Type | Required | Default | Accepted values | Description |
|---|---|---|---|---|---|
loot_table | string | No | — | <namespace>:<path> or a bare path (auto-prefixed with minecraft:) | Sets the vanilla/datapack loot table used by the mob: the value is handed to Bukkit.getLootTable and is only written to the entity when it resolves (the plugin registers no datapack, so a custom namespace resolves to nothing and becomes a silent no-op). Unrelated to loot_tables/*.yml |
can_pick_up_loot | boolean | No | — | true / false | Whether the mob can pick up items from the ground |
remove_when_far | boolean | No | — | true / false | Despawn when players move away (overrides persistent) |
A custom loot table replaces vanilla drops
loot_tables/<mob_id>.yml applies as soon as a same-named file exists — whether or not components has a loot_table key. Once it applies, death runs event.getDrops().clear(), wiping all vanilla drops and replacing them with the pools in that YAML file (kill experience is still kept via experience)
- To keep vanilla drops, do not create a same-named YAML loot table for that mob
- The two are independent:
loot_tableonly affects the vanilla/datapack table itself; writingloot_table: "minecraft:entities/zombie"sets a vanilla table, but with a same-named YAML table present the vanilla drops are still replaced
Equipment fields
| Field | Type | Required | Default | Accepted values | Description |
|---|---|---|---|---|---|
main_hand | ItemConfig or material name | No | — | see ItemConfig below | Main-hand item (applied on spawn only) |
off_hand | ItemConfig or material name | No | — | as above | Off-hand item (applied on spawn only) |
helmet | ItemConfig or material name | No | — | as above | Head slot (equivalent to equipment.head; applied on spawn only) |
chestplate | ItemConfig or material name | No | — | as above | Chest slot (equivalent to equipment.chest; applied on spawn only) |
leggings | ItemConfig or material name | No | — | as above | Legs slot (equivalent to equipment.legs; applied on spawn only) |
boots | ItemConfig or material name | No | — | as above | Feet slot (equivalent to equipment.feet; applied on spawn only) |
equipment | map | No | — | keys are slot names, values are an ItemConfig or a material name | Configure several slots under one section (applied on spawn only) |
Slot names under equipment support these spellings (case-insensitive):
| Slot | Accepted keys |
|---|---|
| Main hand | main_hand, hand |
| Off hand | off_hand |
| Head | helmet, head |
| Chest | chestplate, chest |
| Legs | leggings, legs |
| Feet | boots, feet |
ItemConfig fields:
| Field | Type | Required | Default | Accepted values | Description |
|---|---|---|---|---|---|
item | string | No | — | a vanilla material name (case-insensitive, optional minecraft: prefix) | Only materials that are items are accepted; when matching fails the slot is left as-is |
drop_chance | double | No | — (vanilla default drop chance) | 0.0–1.0 | Drop probability on death; 0.0 means never drops. Not clamped locally — out-of-range values are decided by the vanilla equipment API |
yaml
components:
main_hand:
item: "minecraft:iron_sword"
drop_chance: 0.05
helmet:
item: "minecraft:iron_helmet"
drop_chance: 0.0
equipment:
legs:
item: "minecraft:iron_leggings"
drop_chance: 0.0
# A bare material name works when only the item matters
feet: "minecraft:iron_boots"Mob-specific fields
| Field | Type | Required | Default | Accepted values | Description |
|---|---|---|---|---|---|
is_baby | boolean | No | — | true / false | Whether the mob is a baby. Only affects Ageable and Zombie entities; others ignore it |
creeper_powered | boolean | No | — | true / false | Whether the creeper is charged. Creepers only |
creeper_explosion_radius | int | No | — | — | Explosion radius. Creepers only |
angry | boolean | No | — | true / false | Whether the wolf is angered. Wolves only |
wolf_variant | string | No | — | a minecraft:wolf_variant registry key (e.g. pale, woods, ashen) | Wolf variant. Wolves only; an unrecognised key is ignored |
horse_color | string | No | — | WHITE, CREAMY, CHESTNUT, BROWN, BLACK, GRAY, DARK_BROWN | Horse colour. Horses only; an unrecognised enum is ignored |
horse_style | string | No | — | NONE, WHITE, WHITE_FIELD, WHITE_DOTS, BLACK_DOTS | Horse markings. Horses only |
cat_type | string | No | — | a minecraft:cat_variant registry key (e.g. tabby, siamese, calico, all_black) | Cat variant. Cats only |
parrot_variant | string | No | — | RED, BLUE, GREEN, CYAN, GRAY | Parrot variant. Parrots only |
frog_variant | string | No | — | a minecraft:frog_variant registry key (e.g. temperate, warm, cold) | Frog variant. Frogs only |
axolotl_variant | string | No | — | LUCY, WILD, GOLD, CYAN, BLUE | Axolotl variant. Axolotls only |
llama_color | string | No | — | CREAMY, WHITE, BROWN, GRAY | Llama colour. Llamas only |
llama_strength | int | No | — | 1–5 | Llama strength (determines chest capacity). Llamas only |
slime_size | int | No | — | — | Size (1 = small, 2 = medium, 4 = large). Slimes / magma cubes only |
phantom_size | int | No | — | — | Phantom size. Phantoms only |
fox_type | string | No | — | RED, SNOW | Fox type. Foxes only |
rabbit_type | string | No | — | BROWN, WHITE, BLACK, BLACK_AND_WHITE, GOLD, SALT_AND_PEPPER, THE_KILLER_BUNNY | Rabbit type. Rabbits only |
mushroom_type | string | No | — | RED, BROWN | Mooshroom variant. Mooshrooms only |
panda_main_gene | string | No | — | NORMAL, LAZY, WORRIED, PLAYFUL, BROWN, WEAK, AGGRESSIVE | Panda main gene. Pandas only |
panda_hidden_gene | string | No | — | as above | Panda hidden gene. Pandas only |
goat_screaming | boolean | No | — | true / false | Whether this is a screaming goat. Goats only |
can_break_doors | boolean | No | — | true / false | Whether the mob can break doors. Zombie types only |
villager_type | string | No | — | a minecraft:villager_type registry key (e.g. desert, plains, taiga) | Villager biome type. Villagers / zombie villagers only |
villager_level | int | No | — | 1–5 | Profession level (novice to master). Villagers / zombie villagers only |
villager_profession | string | No | — | a minecraft:villager_profession registry key (e.g. armorer, farmer, librarian) | Profession. Villagers / zombie villagers only |
An entry is skipped when the mob is not of the matching type; an unrecognized enum or registry value is skipped the same way (no error, no log line)
Potion effect field
| Field | Type | Required | Default | Accepted values | Description |
|---|---|---|---|---|---|
potion_effect | string or string list | No | — | colon-separated effect strings, see below | Potion effects applied on spawn (applied on spawn only). Use a single string for one effect or a list for several |
Each effect is one colon-separated string:
text
<effect type>:<duration ticks>[:<amplifier>]| Segment | Required | Description |
|---|---|---|
| Effect type | Yes | Vanilla effect ID, case-insensitive (speed, regeneration, fire_resistance, ...), looked up in the minecraft: namespace |
| Duration ticks | Yes | Duration in ticks; must parse as an integer |
| Amplifier | No | Defaults to 0 (level I); 1 is level II |
yaml
components:
potion_effect:
- "speed:99999:1"
- "regeneration:600"
# A single effect can be written as a plain string
# potion_effect: "fire_resistance:1200"The mapping form is not supported
potion_effect parses only the colon-separated string above. Writing - type: SPEED with duration: and amplifier: keys raises no error, but the whole effect is discarded. ambient, particles and icon are not configurable. An unknown effect type, a missing duration, or an unparsable number also skips the entry silently