This repository is the official Issue Tracker for EvenBetterWhitelist. Note: The source code for this project is All Rights Reserved and is not hosted here. Use this space exclusively to report bugs, suggest features, or request support. Please check existing issues before posting. Thanks for helping improve the plugin!
A modern whitelist system for Minecraft Paper 1.21.x with Discord integration. When a player attempts to join and is not whitelisted, a structured request is posted to your Discord channel. Admins can accept, deny, or ban directly from Discord using buttons.
- Place
WhitelistPluginButBetter-1.0.0.jarin your server'splugins/folder - Start/restart your server
- Edit
plugins/WhitelistPluginButBetter/config.yml - Download GeoLite2-City.mmdb and place it in the plugin folder
- Reload with
/wlp reloador restart the server
- Go to Discord Developer Portal
- Click "New Application" and give it a name
- Go to "Bot" section and click "Add Bot"
- Copy the Bot Token (keep this secret!)
- Enable these Privileged Gateway Intents:
- Message Content Intent
- Go to "OAuth2" → "URL Generator"
- Select scopes:
bot,applications.commands - Select permissions:
Send Messages,Embed Links,Read Message History - Copy the generated URL and open it to invite the bot
Enable Developer Mode in Discord (Settings → Advanced → Developer Mode)
- Server ID: Right-click your server → Copy Server ID
- Channel ID: Right-click the channel → Copy Channel ID
- Admin User ID: Right-click yourself → Copy User ID
- Right-click your channel → Edit Channel
- Go to Integrations → Webhooks
- Create a webhook and copy the URL
discord:
bot-token: "YOUR_BOT_TOKEN_HERE"
webhook-url: "YOUR_WEBHOOK_URL_HERE"
server-id: "YOUR_SERVER_ID_HERE"
channel-id: "YOUR_CHANNEL_ID_HERE"
admin-user-ids: "USER_ID_1,USER_ID_2"
ping-admins: true
cooldowns:
deny-cooldown: 60 # Minutes before denied player can try again
pending-cooldown: 5 # Minutes between join attempts while pending
ip-cooldown: 10 # Minutes before same IP can make new request
geoip:
enabled: true
database-path: "plugins/WhitelistPluginButBetter/GeoLite2-City.mmdb"See the full config.yml for all options!
| Command | Description |
|---|---|
/wlp accept <player> |
Accept a pending whitelist request |
/wlp deny <player> |
Deny a pending whitelist request |
/wlp pending |
View all pending requests |
/wlp list [page] |
View whitelisted players |
/wlp add <player> |
Manually add a player to whitelist |
/wlp remove <player> |
Remove a player from whitelist |
/wlp info <player> |
View detailed player info |
/wlp status |
View plugin status |
/wlp reload |
Reload configuration |
| Permission | Description | Default |
|---|---|---|
whitelistplugin.admin |
Access to all commands | OP |
whitelistplugin.bypass |
Bypass whitelist check | OP |
When a player tries to join, admins receive an embed like this:
┌─────────────────────────────────────────┐
│ New Whitelist Request │
├─────────────────────────────────────────┤
│ Player: Steve │
│ UUID: 069a79f4-... │
│ IP: ||192.168.1.1|| │
│ Location: New York, United States │
│ Client: fabric │
│ Language: en_US │
│ Requested: 2024-01-15 14:30 UTC │
│ │
│ Same IP as: Alex (1 other request) │
│ │
│ [Accept] [Deny] [Ban] │
└─────────────────────────────────────────┘
plugins/WhitelistPluginButBetter/
├── config.yml # Main configuration
├── whitelist.json # Whitelisted players
├── pending-requests.json # Pending requests
├── denied-players.json # Denied players (for cooldowns)
├── requests.log # Action log
└── GeoLite2-City.mmdb # GeoIP database (you provide this)
- Make sure the bot token is correct
- Ensure the bot has permissions in the channel
- Check console for connection errors
- Download GeoLite2-City.mmdb from MaxMind
- Place it in the plugin folder
- Check the path in config.yml
- Make sure the plugin is loaded (
/plugins) - Check if player has
whitelistplugin.bypasspermission - Look for errors in console
This happens when using a reverse proxy (BungeeCord, Velocity, TCPShield, etc.)
For BungeeCord:
- Set
bungeecord: trueinspigot.yml - Restart the server
For Velocity:
- Edit
config/paper-global.yml - Set
proxies.velocity.enabled: true - Set the
secretto match Velocity's forwarding secret - Restart the server
For TCPShield/Other: Follow your proxy's documentation for IP forwarding.
This is expected! The plugin intercepts players before they fully connect, so client brand and locale data isn't available yet. This is a Minecraft limitation, not a bug.
The data we DO capture (IP, UUID, GeoIP location) is still very useful for identifying players and alts!
All Rights Reserved.Any modifications without informing is illegal.
Made for the Minecraft community!