Troubleshooting
Common issues and how to resolve them. Enable debug mode first when something goes wrong - it significantly increases log verbosity across API calls, Discord events, and cron jobs.
General
Enable Debug Mode
Set debug: true in config.json to enable verbose logging:
{
"debug": true
}
This logs additional detail for API calls, Discord events, and cron jobs.
API Connection Issues
Plugin reports "Connection refused" or API errors
- Confirm
zander-webis running and accessible from the Minecraft server. - Verify
BaseAPIURL(or, forzander-pgm,api.baseUrl) in the plugin'sconfig.ymlis correct and reachable from the server host. - Check that the plugin's API key exactly matches
apiKeyin.env. - Ensure the port is open in your firewall if running on separate hosts.
zander-velocity (and, by structural parity, likely zander-waterfall) polls a heartbeat endpoint every 60 seconds and disconnects every connected player if the check fails. A misconfigured BaseAPIURL or an unreachable zander-web instance will actively kick your whole proxy's playerbase, not just silently degrade - treat proxy-to-web connectivity as critical-path in production.
API returns invalidToken
The x-access-token header value does not match apiKey in .env. Update the plugin config to match. Note zander-pgm uses a different scheme - it sends Authorization: Bearer <api.token> instead of x-access-token, so if only Mixed/PGM ingestion is failing, check api.token in zander-pgm's config.yml specifically.
API returns feature-disabled error
The feature is turned off in features.json. Enable it by setting the relevant key to true.
Discord Bot Issues
Bot does not respond to commands
- Confirm the bot token (
discordAPIKey) is correct and the bot is online. - Verify the bot has been re-invited if you've changed its permissions.
- Check that
discord.guildIdinconfig.jsonmatches your Discord server ID. - Ensure the required privileged gateway intents are enabled in the Discord Developer Portal (Message Content, Server Members, Presence).
Slash commands not appearing
Discord can take up to an hour to propagate new slash commands globally. Check the console output on startup for command registration errors.
Discord punishments not working
- Confirm the issuing user's Minecraft account is linked to their Discord account.
- Verify the user has the required LuckPerms permission node (e.g.
zander.discord.punish.warn). - Check that the
mutedrole ID inconfig.jsonis correct.
Database Issues
prisma generate fails
Ensure DATABASE_URL in .env is correctly formatted and the database is accessible:
mysql://user:password@127.0.0.1:3306/zander
Migrations fail
- Run migrations in numeric order from the
migration/directory. - Check for existing conflicting schema by reviewing the error output.
- For
prisma migrate deployfailures, check that the_prisma_migrationstable is not in an inconsistent state.
LuckPerms rank data not loading
- Confirm
LUCKPERMS_URLpoints to the correct LuckPerms database. - The LuckPerms database user needs
SELECTpermission on the LuckPerms tables.
Hub /fly permission not working as expected
zander-hub's plugin.yml declares the /fly permission as zander.fly, but the command code (commands/fly.java) actually checks zander.hub.fly - and Bukkit does not force the two to match, so zander.fly is a dead node that nothing reads. If a player can't fly, grant them zander.hub.fly (not zander.fly, which has no effect). See Permissions for details.
Web Issues
Session not persisting (users logged out on refresh)
- Ensure
sessionCookieSecretis set and consistent - changing this value invalidates all existing sessions. - Check that the session database table exists (created by
dbinit.sql).
Push notifications not working
- Ensure
VAPID_SUBJECT,VAPID_PUBLIC_KEY, andVAPID_PRIVATE_KEYare all set in.env. - VAPID keys must be generated as a pair using
web-push generate-vapid-keys.
Creator content not appearing on Watch page
- Ensure the user has
zander.watch.creatorin LuckPerms. - Confirm the user has linked their Twitch or YouTube account in their profile.
- Verify content matches the configured filter (title markers, tags, or description markers in
config.json). - Check that Twitch/YouTube OAuth credentials are set in
.env.
Logs
System activity is logged to the database and viewable in the dashboard under Dashboard → Logs (requires zander.web.logs permission). Each log entry includes the user, feature, log type (success/warning/error), description, and timestamp.