How to Fix OP Permissions Not Working in Minecraft
Fix operator permissions not working in Minecraft servers. Covers op levels, permission plugins overriding OP, ops.json issues, and proxy configurations.
How to Fix OP Permissions Not Working in Minecraft
The Problem
Player is OP but cannot use commands
"You do not have permission to use this command"
/op works but permissions do not apply
OP level seems too low for certain commands
Operator (OP) status grants elevated permissions on a Minecraft server. When OP permissions fail, the player can connect but cannot execute commands they should have access to. This is usually caused by a permission plugin overriding OP, incorrect OP level, or UUID issues.
Quick Fix
Check if a permission plugin (like LuckPerms) is installed. Permission plugins override vanilla OP permissions. If LuckPerms is active, configure the player's permissions through LuckPerms, not vanilla OP. If no permission plugin is installed, re-op the player from the console: op PlayerName.
Step-by-Step Diagnosis
- Check if a permission plugin is active. Run
/pluginsin-game or check theplugins/folder. If LuckPerms, PermissionsEx, GroupManager, or a similar plugin is installed, it overrides vanilla OP behavior. - If using LuckPerms: OP status alone does not grant permissions when LuckPerms is installed. You must assign permissions through LuckPerms:
/lp user PlayerName permission set minecraft.command.gamemode true. Or add the player to a group with the needed permissions:/lp user PlayerName parent set admin. - Check OP level. Open
ops.jsonand look at thelevelfield for the player. OP levels range from 1-4:- Level 1: Can bypass spawn protection.
- Level 2: Can use singleplayer-like commands (/clear, /gamemode, /tp, etc.).
- Level 3: Can use multiplayer management commands (/ban, /kick, /whitelist, etc.).
- Level 4: Can use all commands including /stop and /op.
- Re-op from console. The server console always has permission to op players. Type
op PlayerNamein the console. This sets OP level to the value ofop-permission-levelinserver.properties(default: 4). - Check ops.json UUID. If the server switched online-mode settings, the player's UUID changed. The old OP entry points to a UUID that no longer matches. Remove the old entry and re-op the player.
- Check function-permission-level. In
server.properties,function-permission-levelcontrols what OP level is needed to run datapack functions. If set to 4, only level 4 OPs can trigger function commands.
Permission Plugins and OP
When LuckPerms or a similar plugin is installed, the vanilla OP system is effectively replaced. The plugin intercepts all permission checks and uses its own database instead of ops.json. To grant a player all permissions in LuckPerms:
/lp user PlayerName permission set * true
Or assign them to an admin group that has a wildcard permission. Using LuckPerms is recommended over vanilla OP for production servers because it provides granular permission control, group inheritance, and permission logging.
Common Causes
- Permission plugin overriding OP. The most common cause. LuckPerms and similar plugins take control of all permission checks.
- OP level too low. The player was opped at level 2 but needs level 4 commands. Re-op from console to apply the default level.
- UUID mismatch. Online/offline mode switch changed UUIDs. Re-op to fix.
- ops.json corruption. Invalid JSON syntax breaks the entire OP list. Validate the file or delete it and re-op players from console.
- Proxy mode issues. Behind BungeeCord/Velocity, OP status must be set on each backend server individually unless using a cross-server permission plugin.
FAQ
Should I use OP or a permission plugin?
For servers with more than a few staff members, use a permission plugin like LuckPerms. It provides fine-grained control (grant /ban but not /stop), group management, and audit logs. Vanilla OP is all-or-nothing at each level.
Can I OP myself without console access?
No. If you are not already OP level 4, you cannot op yourself in-game. You need server console access or file system access to edit ops.json directly.
Why does /op say "Nothing changed" even though the player has no permissions?
The player is already in ops.json but a permission plugin is overriding OP checks. Configure permissions through the plugin instead.
Need a server that handles all this? Astroworld Hosting, NVMe SSDs, Pterodactyl panel, DDoS protection on every plan.