Player Roles

Player Roles

Role & permission management for Fabric servers

by
38.1K Downloads
fabricmanagementutility
Rent Server with this Mod

About this Mod

Player Roles for Fabric

This is a simple implementation allowing for custom permissions to be assigned to players via Discord-like "roles".
Roles and their permissions are defined within a JSON file, which can be easily modified and reloaded at runtime for rapid iteration.

The roles.json file is located in the config directory (<root>/config/roles.json). An example configuration may look like:

{
  "admin": {
    "level": 100,
    "overrides": {
      "name_decoration": {
        "style": ["red", "bold"],
        "suffix": {"text": "*"}
      },
      "permission_level": 4,
      "command_feedback": true,
      "commands": {
        ".*": "allow"
      }
    }
  },
  "spectator": {
    "level": 10,
    "overrides": {
      "commands": {
        "gamemode (spectator|adventure)": "allow"
      }
    }
  },
  "mute": {
    "level": 1,
    "overrides": {
      "mute": true
    }
  },
  "everyone": {
    "overrides": {
      "commands": {
        "help": "allow",
        ".*": "deny"
      }
    }
  }
}

But what's going on here? This JSON file is declaring three roles: admin, spectator and everyone.

everyone is the default role: every player will have this role, and it cannot be removed.
The other roles that are specified function as overrides on top of the everyone role.

Overrides

Within each role declaration, we list a set of overrides. Overrides are the generic system that this mod uses to change game behavior based on roles.
Currently, the supported override types are commands, name_decoration, chat_type, mute, command_feedback, permission_level and entity_selectors.

It is important to consider how overrides are applied when multiple roles target the same things. Conflicts like this are resolved by always choosing the role with the highest level.
So, in the case of the example: although everyone declares every command except help to be disallowed, because admin and spectator have higher levels, they will override this behaviour.

Commands

The commands override is used to manipulate the commands that a player is able to use.
Each override entry specifies a regular expression pattern to match, and then a strategy for how to respond when the mod encounters that pattern.

For example, the pattern .* matches every possible command, while gamemode (spectator|adventure) would match the gamemode command only with spectator and adventure mode.
The strategies that can then be used alongside these patterns are allow and deny:
allow will make sure that the player is allowed to use this command, while deny will prevent the player from using this command.

For example:

"commands": {
  "gamemode (spectator|adventure)": "allow"
}

The commands override can additionally make use of the hidden rule result, which will allow the command to be used,
while hiding it from command suggestions.

Name Decoration

The name_decoration override modifies how the names of players with a role are displayed. This can be used to override name colors as well as prepend or append text.
This has lower priority than scoreboard team colors.

Name decoration might be declared like:

"name_decoration": {
  "prefix": {"text": "[Prefix] ", "color": "green"},
  "suffix": {"text": "-Suffix"},
  "style": ["#ff0000", "bold", "underline"],
  "contexts": ["chat", "tab_list"]
}

Three fields can be optionally declared:

  • style: accepts a list of text formatting types or hex colors
  • prefix: accepts a text component that is prepended before the name
  • suffix: accepts a text component that is appended after the name
  • contexts: accepts a set of possible contexts defining where this decoration should be applied
    • Accepts: chat and tab_list
    • Default: applies to all possible contexts

Chat Types

The chat_type override allows the chat message decorations to be replaced for all players with a role.
This integrates with the Vanilla minecraft:chat_type registry, which can be altered with a datapack.

The chat_type override declares simply the chat_type that should be used:

"chat_type": "minecraft:say_command"

This example will replace all messages for players with a given role to apply the say_command style.

It is important to note that Vanilla chat type registry is loaded from the datapack on server start, and cannot be hot-reloaded like the player roles config.

Declaring custom chat types

Custom chat types can be declared with a custom datapack in data/<namespace>/chat_type/<name>.

For example, we might declare a data/mydatapack/chat_type/admin.json:

{
  "chat": {
    "decoration": {
      "parameters": ["sender", "content"],
      "style": {},
      "translation_key": "%s: %s <- an admin said this!"
    }
  },
  "narration": {
    "decoration": {
      "parameters": ["sender", "content"],
      "style": {},
      "translation_key": "chat.type.text.narrate"
    },
    "priority": "chat"
  }
}

Which can be then referenced in an override like:

"chat_type": "mydatapack:admin"

Permission Level

The permission_level override sets the vanilla for assigned players.
This is useful for interacting with other mods, as well as with vanilla features that aren't supported by this mod.

Permission level is declared like:

"permission_level": 4

Mute

The mute override functions very simply by preventing assigned players from typing in chat.

Mute is declared like:

"mute": true

Command Feedback

By default, all operators receive global feedback when another player runs a command.
The command_feedback override allows specific roles to receive this same kind of feedback.

Command feedback is declared like:

"command_feedback": true

Entity Selectors

Normally, only command sources with a permission level of two or higher can use entity selectors.
The entity_selectors override allows specific roles to use entity selectors.

Entity selectors can be allowed like:

"entity_selectors": true

Other configuration

Roles can additionally be applied to command blocks or function executors through the configuration file.
For example:

{
  "commands": {
    "apply": {
      "command_block": true,
      "function": true
    },
    "overrides": {
    }
  }
}

It may also be useful for a role to inherit the overrides from another role.
This can be done with the includes declaration by referencing other roles with a lower level.
For example:

{
  "foo": {
    "includes": ["bar"],
    "overrides": {
      "commands": {
        ".*": "allow"
      }
    }
  },
  "bar": {
    "overrides": {
      "name_decoration": {
        "style": "red"
      }
    }
  }
}

With this configuration, the foo role will inherit the red name_decoration.

Applying roles in-game

Once you've made modifications to the roles.json file, you can reload it by using the /role reload.

All role management goes through this role command via various subcommands. For example:

  • role assign Gegy admin: assigns the admin role to Gegy
  • role remove Gegy admin: removes the admin role from Gegy
  • role list Gegy: lists all the roles that have been applied to Gegy
  • role reload: reloads the roles.json configuration file

Available Versions

v1.9.0+26.1.2release
MC 26.1, 26.1.1, 26.1.2fabric
May 23, 2026
v1.8.1+1.21.11release
MC 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11fabric
January 5, 2026
v1.8.0+1.21.11release
MC 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11fabric
January 3, 2026
v1.7.0+1.21.10release
MC 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10fabric
October 10, 2025
v1.6.15+1.21.6release
MC 1.21.6, 1.21.7fabric
June 23, 2025

How to Install Player Roles on Your Server

1

Order Server

Order a Minecraft Java server with at least 3 GB RAM (4 GB recommended).

2

Set fabric Loader

In the panel under "Egg", select the fabric loader and matching Minecraft version (26.1.2).

3

Install Mod

Open the mod browser in the dashboard and search for "Player Roles". Click "Install" – done! Alternatively, upload the .jar via SFTP to the /mods folder.

Compatibility

Mod Loaders

fabric

Minecraft Versions

26.1.2, 26.1.1, 26.1 (+28 more)

Server-side

Required

Recommended RAM

4 GB(min. 3 GB)

Frequently Asked Questions

Player Roles server crashes on startup – what to do?

Most common cause: wrong fabric version or insufficient RAM. Check the server log (latest.log) for "OutOfMemoryError" or "Mixin" errors. With Mado Hosting: ensure at least 3 GB RAM is allocated and the loader matches the mod version (26.1.2). You can switch loaders with one click in the panel.

Is Player Roles compatible with fabric?

Player Roles officially supports fabric for Minecraft 26.1.2, 26.1.1, 26.1. The Mado dashboard automatically detects incompatible loader combinations.

Server lagging with Player Roles – how to optimize performance?

Recommended RAM: 4 GB (per 8 players). Use /spark profiler to check if Player Roles consumes the most tick time. Common fixes: reduce server view-distance to 8-10, install "performant" or "starlight" as supplementary mods on Forge. With Mado Hosting, your server runs on NVMe SSDs with dedicated CPU cores for minimal latency.

Rent Modded Server

Install Player Roles with just one click on your server.

Recommended RAM
4 GBab €8/mo
Min. 3 GB | +1 GB pro 8 Spieler
Create Server Now
1-Click Mod Install
NVMe SSD Storage
DDoS Protection included

Details

License
MIT License
Server-side
Required

Supported Versions

26.1.226.1.126.11.21.111.21.101.21.91.21.81.21.71.21.61.21.5+21 more