Skip to main content

Mobs

Mobs are listed under mobs: in mobs.yml, next to config.yml. A change applies to the mobs spawned after /gcadmin reload.

mobs:
stone_sentinel:
model: stone_sentinel
name: Stone Sentinel
level: 5
health: 40.0
damage: 5.0
defense: 20.0
skills:
charge: { cooldownTicks: 140, windupTicks: 24, damageMultiplier: 1.5, minRange: 4.0, maxRange: 12.0 }
loot:
- { item: cobblestone, amount: 1-3 }

The tiers​

The world is cut into tiers of 10 levels, a zone each, and each tier has its own mobs, of the game's own bodies with the RPG around them (ai: vanilla). The last one of a tier is an elite: rare (a low weight and a maxAlive of 1 in its zone), with a boss bar and a big life.

TierZoneMobs
1 to 10HeartlandsZombie (2), Skeleton (4), Meadow Spider (6), Bandit Chief (9)
10 to 20Western WoodsForest Witch (14), Forest Pillager (16), Forest Vindicator (18), Woodland Beast (20)
20 to 30Northern MarchesMarches Stray (22), Marches Footman (24), Marches Raider (27), Marches Warlord (30)
30 to 40Eastern CoastCoast Drowned (32), Sunbaked Husk (34), Coast Raider (36), Tide Warden (40)

The tiers 5 to 10 still use the stone mobs (Stone Sentinel, Stone Crab, Stone Warden), whose levels do not match their zones yet.

The stats​

A mob's life, damage and defense come from its level and its role:

RoleLifeDamageDefenseWhat it is
gruntx1x1x1What most of a zone is.
brutex1.6x0.9x1.3Slower to kill, a little less hard to take.
skirmisherx0.7x1.2x0.6Fragile, hurts, usually from afar. 10 % critical hits.
elitex6x1.4x1.5Rare, with a boss bar. 15 % critical hits.

Before the role, a mob of level L has 20 + 6 L + 0.15 L² of life, 3 + 0.9 L of damage and 1.5 L of defense. The numbers are written out in mobs.yml: change them there. node tools/mob-stats.mjs <level> <role> gives those of a new mob, and --table and --yaml print the whole roster (see for developers).

These numbers are provisional. Players have a level, but their attack does not grow with it yet: a blow does the damage of the weapon (4 to 8), so the high tiers take very long to clear until players have an attack that grows with their level, and the curve is to be set against it.

Two kinds of mind​

aiWhat it is
custom (default)The module's mind: the mob picks the nearest player in sight, chases them, stops in reach, strikes, and uses its skills and phases. This is what a model and the skills need.
vanillaThe game's own mind, kept as it is: a zombie walks and hits, a skeleton shoots as a skeleton does. The module only adds the RPG around it: life, damage, defense, name, level and loot.

type is the entity that makes the body (a zombie by default; skeleton, spider...). With a model it is hidden under the model; without one the body is seen as it is. A model comes from BetterModel (plugins/BetterModel/models/<model>.bbmodel) and needs ai: custom.

Settings​

SettingDefaultWhat it is
typezombieThe entity of the body.
aicustomcustom or vanilla, above.
modelnoneA BetterModel model.
name, levelShown above the mob with its life. The level also sets its experience when xp is not given.
xp0Experience given to the player who kills it. The mobs of mobs.yml give 10 times their level.
bossfalseShows a boss bar with its life to the players within followRange.
health20Its own life, shown above it. The body does not lose life until it runs out.
damage3Base damage of its blow.
defense0100 halves the damage it takes, 300 divides it by four (custom damage model).
critChance, critMultiplier0, 1.5A chance from 0 to 1 and the damage of a critical hit (custom damage model).
speed0.23Blocks per tick, as the movement_speed attribute.
followRange32How far it notices a target, in blocks.
bodyScale1Size of the invisible body that walks. It can still be hit, so it must stay inside the model.
scale1Size of the whole mob (model, body, hitboxes, reaches): 2 is twice as big.
attackReach2.5Distance from its center at which it attacks, in blocks. It grows with scale.
keepDistance0A target closer than this makes it back away instead of closing in (0: never). It still strikes a target in reach.
holdRange0Once its target is in sight within this many blocks, it stops walking to shoot (0: it always closes in). Above keepDistance.
attackImpactTicks7From the start of the attack animation to the damage: when the blow lands in the animation.
attackCooldownTicks24From the start of a blow to the next.
splitInto, splitCountnone, 2Another mob of the file that appears where this one dies, splitCount times (2 to 8). A slime that splits into smaller slimes, which may split too.
skillsnoneSee below.
phasesnoneSee below.
lootnoneSee below.

Skills​

Tried in order, each when it is ready and fits. The name of an entry is its type unless it has a type. Every skill has:

SettingWhat it is
cooldownTicksTime before it can be used again.
windupTicksHow long the warning shows before the blow, so players can get out of the way.
damageMultiplierTimes the mob's damage.

Distances are for scale 1 and grow with the mob.

TypeWhat it doesIts own settings
chargeMarks a band on the ground towards the target, then rushes along it.minRange, maxRange, overshoot (past the target), speed (blocks per tick), hitRadius, knockback, recoveryTicks (still afterwards)
ground_zoneMarks a circle under the target, which fills up until the blow.range, radius, knockUp, animation and animationImpactTicks (played so that its impact falls with the blow)
shootDraws a bow at the target, following it, locks its aim a few ticks before shooting a real arrow (aimed higher with the distance). The drawn bow is the warning: nothing on the ground.minRange, maxRange, arrowSpeed, lockTicks, recoveryTicks

Bosses and phases​

boss: true shows a boss bar, and scale makes the mob bigger. phases: change it as its life falls. Each starts once the life falls below belowHealth (0 to 1): the mob stops, roars and changes for transitionTicks, unhurt, then fights with the phase's scale, speed, damageMultiplier, skillCooldownMultiplier, bossBarColor and skills (which replace the mob's when given). stone_warden is an example.

Loot​

loot: drops where the mob dies, for its killer only:

SettingWhat it is
itemAn item, as in /give.
amountA number (3) or a range (1-3).
chanceFrom 0 to 1. Always when missing.
nameA name in MiniMessage, instead of the item's.

Models​

A .bbmodel is a Blockbench file. In it, a bone named b_<anything> holding one hidden cube is a hitbox: BetterModel makes it a real hitbox that follows the bone through the animations and passes hits on to the mob. Rules when making a model:

  • Build a shape from several boxes. A box does not rotate, and its footprint in the game is a square whose side is the average of the cube's width and depth: a long cube is wrong, split it.
  • Keep the invisible body inside the model: it can still be hit. Set bodyScale to fit.
  • bodyScale is also what collides with blocks: a large model on a small body clips through walls, because pathfinding does not know the shape of the model.
  • BetterModel plays idle, walk and death by itself. attack is started by the module.

To see the hitboxes, set debug.hitbox: true in plugins/BetterModel/config.yml.

Natural spawns​

blockNaturalSpawns (on by default) stops the game's own hostile mobs from appearing, at any difficulty, so the only ones in the world are those of the zones. Spawners, eggs and commands still work, and animals and villagers are not touched.