A comprehensive world protection plugin that allows administrators to protect specific worlds with a whitelist system
A comprehensive world protection plugin for Paper/Spigot servers that allows administrators to protect specific worlds with a whitelist system. Even operators are blocked from accessing protected worlds unless explicitly whitelisted.
/wp go <world> allows players to teleport to worlds (blocks if not whitelisted)WorldProtection-1.0.0.jar in your server's plugins/ folderplugins/WorldProtection/config.yml to your preferences/wp toggle <world> to protect worlds/wp whitelist <world> add <player> to whitelist players# World Protection Configuration
# Default message when access is denied
messages:
prefix: "&c[WorldProtection]&f "
access_denied: "&cYou do not have permission to access this world!"
world_protected: "&eWorld &6%world% &eis protected. Only whitelisted players can access it."
world_unprotected: "&aWorld &6%world% &ais now unprotected."
world_protected_enabled: "&aWorld &6%world% &ais now protected."
player_whitelisted: "&aPlayer &e%player% &ahas been whitelisted for world &6%world%&a."
player_unwhitelisted: "&cPlayer &e%player% &ahas been removed from whitelist for world &6%world%&c."
not_whitelisted: "&cYou are not whitelisted for world &6%world%&c."
world_not_found: "&cWorld &6%world% &cnot found!"
no_worlds_protected: "&7No worlds are currently protected."
teleport_success: "&aTeleported to world &6%world%&a."
teleport_denied: "&cYou do not have permission to teleport to world &6%world%&c."
# Block operators from accessing protected worlds (unless whitelisted)
block_operators: true
# Kick players who try to access protected worlds
kick_on_deny: true
# Safe world to teleport players to when access is denied (if kick_on_deny is false)
# Leave empty to auto-find a safe world
safe_world: ""
# Kick message when player is not whitelisted
kick_message: "&4You are not whitelisted on this world"
messages
%world% placeholder for world names%player% placeholder for player namesblock_operators
true: Operators are blocked from protected worlds (unless whitelisted)false: Operators can access protected worlds (not recommended)kick_on_deny
true: Players are kicked when they try to access a protected world (default)false: Players are teleported back to a safe worldsafe_world
kick_on_deny is false"") to automatically find a safe worldkick_message
& prefix)"&4You are not whitelisted on this world"/worldprotection go or /wp go
/wp go creativeAll admin commands require worldprotection.admin permission (default: OP).
/worldprotection toggle or /wp toggle
/wp toggle creative/worldprotection whitelist add or /wp whitelist add
/wp whitelist creative add PlayerName/worldprotection whitelist remove or /wp whitelist remove
/wp whitelist creative remove PlayerName/worldprotection list or /wp list
/worldprotection info or /wp info
/worldprotection reload or /wp reload
/wp reloadworldprotection.admin
op (operators only)worldprotection.bypass
op (operators only)block_operators: true in configProtect a world:
/wp toggle creative
Output: [WorldProtection] World creative is now protected.
Whitelist players:
/wp whitelist creative add PlayerName
/wp whitelist creative add AnotherPlayer
Check protection status:
/wp info creative
Remove protection:
/wp toggle creative
Output: [WorldProtection] World creative is now unprotected.
Note: Whitelist is preserved but not enforced when world is unprotected
Add a player:
/wp whitelist creative add PlayerName
Remove a player:
/wp whitelist creative remove PlayerName
View all protected worlds:
/wp list
When a player attempts to access a protected world, the plugin:
Checks if world is protected
Checks if player is whitelisted
Checks bypass permission
worldprotection.bypass, access is allowedblock_operators: true and player is OP, still blockedBlocks access if all checks fail
kick_on_deny: true: Kicks player with configured kick messagekick_on_deny: false: Teleports player to safe world (configured or auto-found)The plugin blocks access through:
/wp go)Operators are handled specially:
block_operators: true)Protected worlds and whitelists are stored in:
plugins/WorldProtection/data.yml
This file is automatically created and updated when:
plugins/WorldProtection/
├── config.yml # Configuration file
└── data.yml # Protected worlds and whitelists (auto-generated)
Operators can still access protected worlds:
block_operators in config.yml (should be true)worldprotection.bypass permission/wp go <world> as an operator - you should be blocked and teleported awayPlayers can still access protected worlds:
/wp list/wp info <world>Whitelist not working:
/wp toggle <world>/wp info <world>Players getting stuck:
/wp whitelist <world> add <player> to allow them access/wp toggle <world>/wp go <world> to attempt teleportation (will be blocked if not whitelisted)Multiverse worlds not working:
/mv list to see world names, but you can use any case variationBy default, operators are blocked from accessing protected worlds. This is intentional and provides additional security:
To allow operators access, you must:
/wp whitelist <world> add <operator_name>block_operators: false in config.yml (not recommended)Important: Even if kick_on_deny is enabled, operators are teleported instead of kicked, as server protections may prevent kicking operators.
The worldprotection.bypass permission exists for special cases but:
block_operators setting// Check if a world is protected
boolean isWorldProtected(String worldName)
// Check if a player is whitelisted for a world
boolean isPlayerWhitelisted(UUID playerUUID, String worldName)
// Check if a player can access a world
boolean canAccessWorld(Player player, String worldName)
The plugin listens to and handles:
PlayerJoinEvent - Blocks players joining in protected worldsPlayerChangedWorldEvent - Blocks world changesPlayerTeleportEvent - Blocks teleportationPlayerPortalEvent - Blocks portal usageCurrent Version: 1.0.0
For issues, feature requests, or questions, please open an issue on the project repository.
This plugin is provided as-is for use on Minecraft servers.
Developed for Paper 1.21.x servers with optional Multiverse-Core integration.