Frequently asked questions
The questions that come up most.
The plugin does not load at all
packetevents is a hard dependency. Without it in plugins/, the server never loads the plugin and
you will not see ExyliaPracticeBotV3 enabled! in the console. ExyliaLib is listed as soft only so
the loader can install it — the plugin still needs it to run. Check both are there.
Why does the plugin need PacketEvents?
For load order, and for the library underneath it. The plugin's own code never calls the PacketEvents
API; ExyliaLib's packet-backed features do, and that check happens once, on first use. Declaring it as
a hard depend is what guarantees PacketEvents is loaded and initialised before anything on top of it
runs.
"You can't spawn a bot in this world"
The world you are standing in is not in the worlds list in config.yml. The list ships holding
Exylia's own exylia_sandbox_* worlds, so on any other server nothing is allowed until you replace it
with your own world names — an empty list allows nothing, it is not a wildcard. Names are matched
exactly as the server names the world. /bot reload picks up the change.
"You already have a bot. Use /bot remove first."
One bot per player, always. The plugin keys every bot by its owner, so asking for a second one is
refused rather than silently replacing the first. /bot remove, or the red button on the menu.
"The server is already running N bots. Try again in a moment."
That is max-bots, the server-wide ceiling, 16 by default. It is a real ceiling and not a
formality: every bot thinks once per tick and runs its own pathfinding search, so the cost is per bot
and it is paid every tick. Raise it only after watching your tick time with the current one full.
Automatic respawns go through the same check as a fresh spawn, so a respawn can never walk past a cap a spawn would have been refused by.
My bot vanished on its own
There are four reasons, and each one tells you which it was:
| It said | Why |
|---|---|
| "Bot removed: you died." | Its owner died. |
| "Bot removed: you changed worlds." | Its owner left for another world. |
| "Bot removed: you went too far away." | The gap between you grew past 200 blocks — the leash. |
| (nothing) | You logged out or were kicked. The bot goes with you. |
The first three are checked continuously; the leash is measured every tick between the bot and the player it is fighting.
Do bots survive a restart?
No, and deliberately. A bot is a session object: every one is removed when the plugin shuts down, and the mannequin is spawned with persistence switched off so that even a crash or a hard kill — anything that skips the shutdown hook — cannot leave one standing in your world for the next boot to inherit.
Do my settings survive a restart?
Yes. Settings are stored per player, keyed by UUID, in the practicebot_players table: mode,
difficulty, every piece of armour and its enchantment, hands, knockback, strength, speed, and every
slider on the fine-tuning screen. The row is read when you join and written the moment a setting
changes, so nothing is lost to a crash either. Point database.yml at MySQL, MariaDB, PostgreSQL or
MongoDB and the same settings follow the player between servers.
/bot reset puts every one of them back to the server default.
Can two players share a bot?
No. A bot belongs to one owner, it fights that owner and nobody else, and only that owner can open its menu by shift right-clicking it. Another player standing next to it is not a target. The only way a bot ever looks at somebody other than its owner is another plugin retargeting it through the developer API.
Why did my bot come back after I killed it?
Because respawn.enabled is on, with respawn.delay-seconds set to 2.0. You get "Bot died!
Respawning..." and then "Bot respawned!". Turn respawn.enabled off to have a killed bot stay gone
until you spawn another. A respawn is cancelled if you leave the allowed world, log out, or the server
is at its bot cap.
Nothing I do kills it
advanced.health.invincible is on, or the totems are. Health is topped back up every tick while
invincible is set, and advanced.health.totems is -1 by default, which means the bot re-arms with a
totem indefinitely. Both are on the fine-tuning screen.
Where did the death message go when the bot killed me?
It is suppressed on purpose. If the last thing to hit you was a bot, the public death message is dropped — a training dummy killing somebody is not server news.
Does it work on Folia?
Yes. folia-supported: true, and it is written for it: each bot ticks on the thread that owns its
region, spawning is scheduled on the thread that owns the destination, and every bot holds a chunk
ticket for the chunk it stands in so it keeps thinking with nobody nearby.
Where do I get support?
On the Exylia Discord.
Something missing on this page? Tell us on Discord