Troubleshooting
Real problems, with the actual fix.
That's the kickMessageLookupFailure message. It means the Worker is unreachable and you have blockOnLookupFailure: true (the new default). Two things to check:
- From the server console, try
curl -I https://geoprotect.demonzdevelopment-e64.workers.dev/?ip=8.8.8.8. If that times out, the issue is network egress, not the plugin. - If you deployed your own Worker, double-check the
gatewayTokenmatchesGATEWAY_TOKENSon the Worker side. Mismatches return 401 and the plugin treats that as a lookup failure.
Quick fix: blockOnLookupFailure: false in your config. Re-enable when the network is healthy.
That's the ISP keyword scanner doing its job — OVH, Hetzner, DigitalOcean are all in the default vpnKeywords list because they sell VPSes that are commonly used for game-server bot farms.
Options:
- Remove the specific keyword from
vpnKeywordsif you know your player base is on that host. - Set
vpnCheckEnabled: falseto disable both the provider's VPN/proxy/hosting flags and the keyword scan. - Combine: keep the keyword, but ALLOWLIST the specific players with
georestrict.bypass+ OP on the backend server.
Check which jar is where. If you put the plugin on the backend Bukkit server and your players connect through Bungee/Velocity, the connection arrives at the backend with the proxy's IP — the proxy is the one seeing the player's actual IP at the network edge. Either:
- Install on the proxy (recommended), or
- Install on the backend AND enable
proxy-protocolorip-forwarding: truein Bungee/Velocity so the backend sees the real IP, not the proxy's.
You can install on both — the backend will see a second check after the proxy's, and the player gets denied at the proxy if they get past it.
Check the startup log for GeoRestrict v2.0.0 starting.... If it is missing, confirm that the jar is in plugins/ and Java 17 or newer is in use. If the line appears before an error, keep the complete stack trace; the reflection-based Folia adapter may need an update when a fork changes scheduler methods.
Run /georestrict cachestats first. The default maxCacheEntries: 100000 cap prevents unbounded growth; the oldest entries are evicted after the cap. If the count is above your configured cap, confirm the running jar is v2.0.0 and that the config actually loaded. You can run /georestrict purgecache after saving a copy for diagnosis.
That is expected while Modrinth reports a newer release than the running jar. Update when convenient, or set updateCheck: false if you do not want periodic reminders. A notice for the same version should be reported with the local version and the Modrinth version shown in the log.
Three usual causes:
- Webhook URL is wrong or revoked. Regenerate in Discord, paste the new URL,
/georestrict reload. - Network egress to
discord.comis blocked (some hosting providers). Check from the server console:curl -I https://discord.com/api/webhooks/... - You have an empty field in
discord.fields. The plugin drops empty fields, but a malformed YAML{name: ""}used to throw. Make sure each field has a name and a value.