Troubleshooting Bestiary
Bestiary's diagnostic commands are designed to answer different layers of the same problem:
/bestiary info <mob|skill>
/bestiary cast <skill> [target]
/bestiary debug <mob>
/bestiary platform
info shows the compiled definition, cast traces an isolated execution, debug attaches the
trace to a live mob, and platform records the detected compatibility tier and loaded content.
A definition does not load
Read the grouped load report after startup or /bestiary reload. Errors are isolated per
definition, so one bad mob does not remove unrelated working content. Verify:
- the id namespace follows the file location;
- every referenced skill, mob, drop table or Sigil item exists;
- shorthand braces, targeters, conditions and triggers are balanced;
- durations and numeric ranges use a supported form;
- an integration-backed mechanic is available on this server.
Fix the first error for that definition, reload, then inspect it with /bestiary info.
A skill loads but does nothing
Run /bestiary cast <skill> and follow the trace node by node. Look for a targeter resolving zero
targets, a condition returning false, an expression resolving an unexpected value, or a mechanic
returning failure. Use /bestiary debug <mob> when the problem depends on live threat, phase or
trigger state.
A custom mob looks vanilla
Confirm the mob definition loaded and inspect its options, equipment, attributes, bossbar and
ModelEngine settings. If custom AI is expected, check /bestiary platform: unsupported NMS AI
features must report a version gate, while portable Bukkit AI continues to work.
A mob does not spawn
For a manual test, use /bestiary spawn <mob>. If that succeeds, inspect the spawning source:
- placed spawner: list it, confirm world/location, radius and player requirements;
- random rule: check biome/world/light/height conditions and the per-world budget;
- structure anchor: list anchors, confirm the stored mob id, activation range and cooldown;
- external system: confirm the hook is installed and enabled.
/bestiary anchor reset clears an intended respawn cooldown for testing.
A guard aborts a skill
The warning names the skill, limit and offending node path. Do not immediately raise the limit. Check for recursive skill calls, nested repeats, an overly broad targeter or a large particle shape. The wall-clock budget normally suspends and resumes; depth, mechanic and target ceilings abort loudly because silently truncating a boss action would be harder to diagnose.
Players see lag or too many particles
Use the timing mode in /bestiary debug, reduce target fan-out, increase timer periods and narrow
particle view distance before reducing visual fidelity globally. Polled triggers create no task
unless a definition uses them, so identify the specific live mob and skill first.
Storage fails at startup
SQLite needs a writable Bestiary data folder. MySQL needs a reachable host, valid database and credentials, and the schema permissions required for migrations. Bestiary does not silently switch backends after a connection failure because that would split persistent state.
Capture a reproducible baseline
Before changing limits or definitions, save the startup load report, /bestiary platform,
/bestiary info <mob> and one /bestiary cast <skill> trace. For live-only failures, attach
/bestiary debug <mob>. Together they separate parsing, capability selection, compiled content and
runtime context.