Compatibility
Minecraft: Java Edition
Platforms
Links
Tags
Creators
Details
EvenBetterWhitelist - 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.
Installation Steps
- 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
๐ค Discord Bot Setup
1. Create a Discord Application
- 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
2. Invite the Bot
- 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
3. Get Your IDs
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
4. (Optional) Create a Webhook
- Right-click your channel โ Edit Channel
- Go to Integrations โ Webhooks
- Create a webhook and copy the URL
โ๏ธ Configuration
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!
๐ Commands
| 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 |
๐ Permissions
| Permission | Description | Default |
|---|---|---|
whitelistplugin.admin |
Access to all commands | OP |
whitelistplugin.bypass |
Bypass whitelist check | OP |
Discord Embed Preview
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] โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐๏ธ File Structure
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)
Troubleshooting
Bot not responding to buttons?
- Make sure the bot token is correct
- Ensure the bot has permissions in the channel
- Check console for connection errors
GeoIP not working?
- Download GeoLite2-City.mmdb from MaxMind
- Place it in the plugin folder
- Check the path in config.yml
Players not being kicked?
- Make sure the plugin is loaded (
/plugins) - Check if player has
whitelistplugin.bypasspermission - Look for errors in console
Seeing Private IP (10.x.x.x, 192.168.x.x)?
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.
Client/Language shows "N/A (Pre-login)"?
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!
๐ License
All Rights Reserved.Any modifications without informing is illegal.
Made for the Minecraft community!


