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!


