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 colorsprefix: accepts a text component that is prepended before the namesuffix: accepts a text component that is appended after the namecontexts: accepts a set of possible contexts defining where this decoration should be applied- Accepts:
chatandtab_list - Default: applies to all possible contexts
- Accepts:
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 permission level 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 theadminrole toGegyrole remove Gegy admin: removes theadminrole fromGegyrole list Gegy: lists all the roles that have been applied toGegyrole reload: reloads theroles.jsonconfiguration file
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 1mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 5mo ago | 1 | ||||
| 7mo ago | 1 | ||||
| 10mo ago | 1 | ||||
| 10mo ago | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 |
- Add support for [Fabric Permission API](https://maven.fabricmc.net/docs/fabric-api-0.149.1+26.2/net/fabricmc/fabric/api/permission/v1/package-summary.html)
- Port to 26.1 by @cassiancc in https://github.com/NucleoidMC/player-roles/pull/118
## New Contributors
- @cassiancc made their first contribution in https://github.com/NucleoidMC/player-roles/pull/118
- Fix [#115](https://github.com/NucleoidMC/player-roles/issues/115): invalid player data on 1.21.11
- Updated to Minecraft 1.21.11
- Updated to Minecraft 1.21.10
- Update mod to Minecraft 1.21.6 by @haykam821 in https://github.com/NucleoidMC/player-roles/pull/106
- Fix online player roles being cleared when reloading roles by @haykam821 in https://github.com/NucleoidMC/player-roles/pull/104
- Update mod to Minecraft 1.21.5 by @haykam821 in https://github.com/NucleoidMC/player-roles/pull/101
- Fix MessageFormat mixin error by @BlazingTwist in https://github.com/NucleoidMC/player-roles/pull/96
## New Contributors
- @BlazingTwist made their first contribution in https://github.com/NucleoidMC/player-roles/pull/96
- Update to 1.21.1 by @ashhhleyyy in https://github.com/NucleoidMC/player-roles/pull/92
- Update mod to Minecraft 1.21 by @haykam821 in https://github.com/NucleoidMC/player-roles/pull/89
- Updated to Minecraft 1.20.6
- Fix permission level during login by @TheEpicBlock in https://github.com/NucleoidMC/player-roles/pull/81
## New Contributors
- @TheEpicBlock made their first contribution in https://github.com/NucleoidMC/player-roles/pull/81
- Updated to 1.20.4 by @jaskarth
- Update mod to Minecraft 1.20.2 by @haykam821 in https://github.com/NucleoidMC/player-roles/pull/77
- feat: add hover support to name decoration override by @williambl in https://github.com/NucleoidMC/player-roles/pull/78
- Name decorations are now applied in the tab list
- A new
contextslist field is now included in thename_decorationoverride, which can be used to control where name decorations are applied - Accepted values are
chatandtab_list - Fix POM dependencies by @kb-1000 in https://github.com/NucleoidMC/player-roles/pull/73
- Fix #56: improve compatibility with some mods such as EssentialAddons by avoiding Mixin conflict
- Fix #71: increase maximum command chain length to support all of Vanilla commands
## New Contributors
- @kb-1000 made their first contribution in https://github.com/NucleoidMC/player-roles/pull/73
- Update to Minecraft 1.20
- Update to Minecraft 1.19.4
- Add a
bypass_player_limitrole override by @williambl in https://github.com/NucleoidMC/player-roles/pull/66
- Update to Minecraft 1.19.3-rc1
- Update to Minecraft 1.19.1
- Update to 1.19 (thanks @Foxite!)
- Replace
chat_formatoverride withchat_typethat references the Vanilla chat type registry - Replace
name_styleoverride withname_decorationthat can support applying prefixes & suffixes to names
These are **breaking** changes to these overrides that are required to update to support 1.19's new chat features. Details on how to use these overrides can be found in the [README](https://github.com/NucleoidMC/player-roles/blob/1.19/README.md).
- Full Changelog**: https://github.com/NucleoidMC/player-roles/compare/v1.5.2...v1.6.0
- Fix role autocompletion giving only higher roles (#50, thanks @EnnuiL!)
- Fix
chat_formatoverride not applying for other players (#51) - Fix incompatibility with Drogtor causing crashes (#52)
- Propagate errors from override definitions that failed to parse: previously these would silently fail (incorrectly), causing confusion
- Fix
permission_keysoverride type not working until/role reloadwas run (#45) - Fix
/role reloadnot sending up-to-date permissions to players, causing command suggestions to be incorrect until the next/role reloador relog
## What's Changed
- Add the entity selectors override by @haykam821
- Implement a VirtualServerCommandSource for specifying a custom set of roles by @ashhhleyyy
- Update to 1.18 by @fluse1367
- Full Changelog**: https://github.com/NucleoidMC/player-roles/compare/v1.4.3...v1.5.0
- Fix incorrect permission level checking for the
/rolecommand (#41)
- Fix chat format override not applying due to an improperly upgraded mixin
- Fix published API jar not containing
fabric.mod.jsonand consequently not being remapped as a dependency
- Fix a critical issue where the game would throw an error when players attempted to respawn (#32)
- Update to 1.17!
- Fix wrong order of inheritance for overrides (#29)
- Fix command blocks and functions having the
everyonerole applied (#28) - Separate out a simple includable API for interacting with Player Roles