Content generated with AI — it may contain mistakes.

Systems

Limits

Two different ceilings: max-bots, how many bots the server runs at once, and the limits block, how far each slider in the menu may be pushed.

The plugin has two things called a limit and they are not the same thing. One counts bots. The other bounds a number inside one bot. Confusing them is how a server ends up with a cap it did not mean to set.

max-botsthe limits block
What it countsBots alive on the whole serverNothing. It bounds one setting
Who it stopsThe next player to type /botThe player nudging a slider in the advanced menu
What happens at the edgeThe spawn is refused with a messageThe slider stops moving

max-bots — how many bots exist

One number, at the bottom of config.yml, for the whole server.

plugins/ExyliaPracticeBotV3/config.yml
# How many bots may exist on the server at once.
# Every bot thinks once per tick and searches for its own path,
# so this is a real ceiling and not a formality. Raise it only
# after watching the tick time with the current one full.
max-bots: 16

The comment is not boilerplate. A bot is not a decoration that sits in a chunk: it observes, decides, aims, moves and swings every single tick, and when terrain gets in its way it runs its own bounded grid search on top of that. Sixteen bots is sixteen of those per tick. The number that tells you whether you can raise it is your tick time with the current ceiling full, not the number itself.

Every spawn goes through one place, so the ceiling has one place to live: /bot spawn, the menu's spawn button, an automatic respawn and a bot another plugin asks for are all counted the same way. At the ceiling the spawn fails with BotLimitReachedException, and the player reads bot.limit-reached:

plugins/ExyliaPracticeBotV3/messages.yml
bot:
  limit-reached: "%prefix% {error}The server is already running %limit% bots. Try again in a moment."

%limit% is the ceiling that refused the spawn.

Replacing your own bot always works

The count is checked against players who do not already have a bot. If you have one, spawning again replaces it rather than adding to the total, so a full server never locks you out of your own bot.

max-bots is read as at least 1: setting it to zero or a negative number does not disable the plugin, it leaves you with a ceiling of one.

The limits block — how far a slider goes

Every numeric setting in the advanced menu is a pair of buttons that adds or subtracts a step. This block is where each of those stops.

plugins/ExyliaPracticeBotV3/config.yml
# Bounds the in-game menu clamps its sliders to.
limits:
  min-attack-speed: 0.25
  max-attack-speed: 4.0
  min-movement-speed: 0.25
  max-movement-speed: 3.0
  min-attack-reach: 1.0
  max-attack-reach: 6.0
  min-follow-distance: 1.0
  max-follow-distance: 12.0
  min-attack-damage: 0.5
  max-attack-damage: 40.0
  min-max-health: 1.0
  max-max-health: 40.0
  min-shield-disable: 0.0
  max-shield-disable: 20.0
  # Totems stop at -1, which is the unlimited setting.
  min-totems: -1.0
  max-totems: 16.0
SliderRangeWhat it bounds
Attack speed0.25 – 4.0The multiplier on the cadence the mode chose.
Movement speed0.25 – 3.0The multiplier on walk and sprint speed. 1.0 is a vanilla player.
Attack reach1.0 – 6.0Blocks the bot can hit from. Vanilla players get 3.0.
Follow distance1.0 – 12.0How close it stays out of combat.
Attack damage0.5 – 40.0A fully charged, non-critical hit, in half-hearts.
Max health1.0 – 40.0Maximum health, in half-hearts.
Shield disable0.0 – 20.0Seconds an axe hit keeps its shield down.
Totems-1.0 – 16.0Spare totems per life.

Two things about how a slider lands on its value:

  • It rounds to one decimal. A step is applied, clamped into the range, and then rounded, so a slider never accumulates a trailing fraction no matter how many times it is nudged.
  • Totems bottom out at -1, and -1 means unlimited. It is not a floor of "none" — 0 is none, the totem in the kit and nothing after it. One step below that is a bot that never runs out, which the menu shows as ∞.
These bounds are the menu's, not the config's

limits is applied when a player moves a slider. It does not re-clamp what you write under advanced in config.yml. A default set outside its own bounds is used as written, and the first nudge in the menu pulls it inside the range and leaves it there.

Raising a maximum is a design decision about your server, not a performance one: a bot with forty half-hearts and six blocks of reach costs the same tick time as a default one. max-bots is the key that costs tick time. See Behaviour for what a bot actually does with its tick, and Configuration for every key in the file.

Something missing on this page? Tell us on Discord