Skip to main content

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-web is running and accessible from the Minecraft server.
  • Verify BaseAPIURL (or, for zander-pgm, api.baseUrl) in the plugin's config.yml is correct and reachable from the server host.
  • Check that the plugin's API key exactly matches apiKey in .env.
  • Ensure the port is open in your firewall if running on separate hosts.
warning

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.guildId in config.json matches 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 muted role ID in config.json is 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 deploy failures, check that the _prisma_migrations table is not in an inconsistent state.

LuckPerms rank data not loading​

  • Confirm LUCKPERMS_URL points to the correct LuckPerms database.
  • The LuckPerms database user needs SELECT permission 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 sessionCookieSecret is 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, and VAPID_PRIVATE_KEY are 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.creator in 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.