Description
# Rp Essentials
**Rp Essentials** is a comprehensive server-side utility mod built for immersive Roleplay servers running Minecraft 1.21.1 on NeoForge. It provides a complete suite of RP tools: proximity-based name obfuscation, a profession and license system, a warn system, connection tracking, private messaging, schedule automation, staff moderation tools, advanced chat formatting, world border warnings, named zones, Death RP, and deep LuckPerms integration. All configurable in real-time without restarts.
> Current version: **4.1.10**: See [CHANGELOG](https://modrinth.com/mod/rp-essentials/changelog) for the full history.
---
## Requirements
| Dependency | Version | Side | Required |
|:-----------|:--------|:-----|:---------|
| Minecraft | 1.21.1 | Both | ✅ |
| NeoForge | 21.1.219+ | Both | ✅ |
| LuckPerms | Any | Server | ⬜ Optional |
| ImmersiveMessages | neoforge-1.21.1:1.0.18 | Client | ⬜ Optional |
| TxniLib | neoforge-1.21.1:1.0.24 | Client | ⬜ Optional |
> ImmersiveMessages and TxniLib are only required on the **client** if you use `zoneMessageMode = IMMERSIVE`. The server runs fine without them.
---
## Installation
1. Download the latest `rpessentials-X.X.X.jar` from the releases page.
2. Place the JAR in your server's `mods/` folder.
3. *(Optional)* Install [LuckPerms](https://luckperms.net/) for prefix/suffix and group-based staff permissions.
4. Start the server: all config files are generated automatically under `config/rpessentials/`.
5. Edit the relevant config files (see 'Configuration' below).
6. Reload in-game with `/rpessentials config reload` or restart the server.
---
## Features
### Proximity Obfuscation
Prevents metagaming by hiding player identities based on distance:
- Player names in the TabList and above heads are replaced with `?????` beyond a configurable range (default: 8 blocks).
- **Tab list player head hidden for obfuscated players:** The skin icon next to an obfuscated player's name in the tab list is hidden, preventing skin-based identification. Non-obfuscated players, staff, whitelisted players, and always-visible players are unaffected.
- **Sneak Stealth Mode:** Crouching players are only detectable at 2 blocks (configurable).
- **Nametag Hiding:** Optionally hide all player nametags above heads server-wide.
- **Whitelist:** Players who always see all names clearly.
- **Blacklist:** Players who are always hidden regardless of distance (stealth staff, NPCs).
- **Always Visible List:** Players who are never obfuscated to anyone.
- **Spectator Blur:** Players in spectator mode are automatically hidden from the TabList.
- LuckPerms rank prefixes are always hidden during obfuscation to prevent rank-based metagaming.
- Staff with `opsSeeAll` see both nickname and real name simultaneously: `Nickname (RealName)`.
### Nickname System
Persistent RP nicknames fully integrated across all mod systems:
- Set custom nicknames with full `§` and `&` color code support.
- Nicknames appear in the TabList, above heads, in chat, and in private messages.
- Stored persistently in `world/data/rpessentials/nicknames.json`.
- `/whois` allows staff to reverse-lookup any nickname to its real MC username and UUID.
### Nametag System
Realistic nametag behavior integrated with the nickname system:
- **Block occlusion:** Nametags are hidden when a block is between the viewer and the target. Implemented by switching `Font.DisplayMode` from `SEE_THROUGH` to `NORMAL`, activating the GPU depth test, same technique as the Realistic Nametag mod. No raycast, no performance overhead.
- **Server nickname on nametag:** The nametag displays the nickname set on the server (via `/rpessentials nick`), with the LuckPerms prefix and full color code support. Never uses a locally cached nickname.
- **Global hide toggle:** All nametags can be hidden server-wide via `hideNametags = true` in `rpessentials-core.toml` or `/rpessentials config set hideNametags true/false`.
### Profession & License System
A complete job restriction system for RP servers:
- Define unlimited professions with custom names and color codes.
- Physical **license items** are given to players, carrying profession metadata and issuance date.
- **RP Licenses:** Decorative-only licenses for events, with a printed expiration date and no actual permissions.
- **Restriction types:** crafting, block breaking, item usage, equipment (armor/weapons), and attacks.
- **Global restrictions** apply to all players by default, with **per-profession overrides** for licensed players.
- Wildcard pattern support: `minecraft:*_pickaxe` blocks an entire item category.
- Restriction messages shown via action bar with anti-spam cooldown.
- Tooltips display required professions on restricted items (client-side packet sync).
- **License Audit Log:** Every `GIVE`, `REVOKE`, and `GIVE_RP` action is permanently logged to `world/data/rpessentials/license-audit.json`.
- **Temp License Registry:** RP licenses are tracked in `world/data/rpessentials/licenses-temp.json`.
- Revoked license items are automatically removed from the player's inventory.
- Whitelisted players are exempt from all profession restrictions (configurable).
- Granting or revoking a license automatically adds or removes the corresponding vanilla scoreboard tag (tag name = profession ID).
### Warn System
Full staff warning system for moderation:
- Issue **permanent** or **temporary** warns to any online player.
- The warned player receives an immediate in-chat notification with the reason and duration.
- On every login, players are notified of their active warn count and invited to run `/mywarn`.
- `/mywarn` lets any player view their own active warns with reason, issuer, date, and remaining time.
- Configurable staff broadcast on every warn add and warn remove.
- Automatic purge of expired temp-warns on player login (configurable).
- Warn IDs are auto-incremental integers, recalculated after every deletion to avoid gaps.
- Data stored in `world/data/rpessentials/warns.json`.
### Last Connection Tracking
Automatic recording of player connection history:
- Records last login and last logout for every player.
- Data stored in `world/data/rpessentials/lastconnection.json`: human-readable `UUID (McUsername)` key format.
- Staff can look up any player's last connection time, even for offline players.
- List view shows the N most recent connections sorted by date.
### Private Messaging
Custom `/msg` system fully replacing vanilla messaging:
- `/msg `, `/tell`, `/w`, `/whisper`: send private messages with Rp Essentials formatting.
- `/r `: reply to the last person who messaged you.
- Messages formatted with nicknames, LuckPerms prefixes/suffixes, and color codes.
- Clickable "Click to reply" button in received messages.
- Console-to-player messaging supported.
### Advanced Chat
Full chat formatting system:
- Customizable player name format with LuckPerms prefix/suffix support (`$prefix $name $suffix`).
- Full message template with timestamp and color support (`$time | $name: $msg`).
- Global chat message color configuration (16 Minecraft colors available).
- Timestamp system with customizable Java `SimpleDateFormat`.
- **Real-time Markdown support:**
- `**text**` → **Bold**
- `*text*` → *Italic*
- `__text__` → Underline
- `~~text~~` → Strikethrough
- `/colors` displays all available colors and formatting codes with a visual preview.
- Full integration with the nickname system, nicknames appear in chat automatically.
### Join / Leave Messages
- Fully customizable join and leave messages with `{player}` and `{nickname}` placeholders.
- Full color code support.
- Can be disabled entirely.
### Welcome Message
- Configurable multi-line welcome message sent to players on login.
- Optional sound effect with configurable volume and pitch.
- `{player}` and `{nickname}` variable support.
- Integrates with the schedule system to display server status.
### Server Schedule
Automated server opening and closing management with per-day support:
- Each day of the week (`MONDAY` through `SUNDAY`) has its own `enabled`, `open`, and `close` fields.
- Disabled days are treated as fully closed.
- Automated warnings at 45, 30, 10, and 1 minute before closing.
- Smart kick system that only affects non-staff players.
- Staff receives notifications when the server opens or closes.
- The kick message displays the next open day and its hours (placeholders: `{day}`, `{open}`, `{close}`).
- `/rpessentials schedule` and `/schedule` display the full week at a glance with the current day highlighted.
- Aliases: `/schedule` and `/horaires`.
### Death Hours
An optional schedule layer that activates Death RP during configured time slots, independently of the global Death RP toggle. Supports cross-midnight ranges. Disabled by default.
### HRP Hours
An optional schedule layer for out-of-roleplay (HRP) period management:
- Two tiers: tolerated (noted but not punished) and allowed (fully free).
- Broadcast message sent once per slot start to all connected players.
- Configurable display mode: `CHAT`, `ACTION_BAR`, `TITLE`, `IMMERSIVE`.
- Disabled by default, entirely ignored when `enableHrpHours = false`.
### Death RP
Permanent death system for RP servers:
- Global toggle enabling or disabling the system in real-time.
- Per-player overrides to enable, disable, or reset to the global state.
- On RP death: a broadcast is sent to all connected players with the deceased's nickname and real name.
- A configurable sound is played to all players on RP death.
- Optional automatic whitelist removal on RP death (`whitelistRemove`).
- All messages and sounds are fully configurable for both global and per-player toggles.
### World Border & Named Zones
- Distance-based warning triggered by proximity to spawn (independent of the vanilla world border).
- Configurable message with `{distance}` and `{player}` placeholders.
- **Named Zones:** Define circular zones with center coordinates, radius, and custom entry/exit messages.
- Configurable display mode for zone messages: `IMMERSIVE`, `CHAT`, `ACTION_BAR`.
### Staff Moderation Tools
Silent staff commands with full logging:
- Silent gamemode, teleport, and effect commands: invisible to other players.
- All actions logged to console and broadcast to other online staff (configurable).
- Target notification disabled by default (stealth mode).
### Teleportation Platforms
- Define named platforms across dimensions with custom coordinates.
- Staff can teleport themselves or other players to any platform.
- `/setplatform` command to create or update a platform without editing the config file.
### Roles
- Assign predefined roles to players via `/rpessentials setrole`.
- Automatically removes all existing role tags, adds the new tag, and sets the corresponding LuckPerms group.
- Roles configurable in `rpessentials-core.toml` under `[Roles]`. Format: `roleId;lpGroup`.
- Full tab-completion of available roles.
- Requires OP level 3.
### Auto-Unwhitelist
Automatic removal of inactive players from the whitelist:
- Configurable inactivity threshold (days).
- Runs once per day at midnight.
- Requires `enableLastConnection = true`.
- Staff members online at the time receive a clickable cancel button to immediately re-whitelist the player.
- Optional extra commands executed per removed player. Placeholders: `{player}`, `{uuid}`.
- Disabled by default.
### Staff Permission System
Multi-layered staff detection for maximum reliability:
- Scoreboard tags (`admin`, `modo`, `staff`, `builder`: configurable).
- Minimum OP level bypass (configurable from 0 to 4).
- LuckPerms group integration (configurable).
- Results cached for better performance (30-second cache).
- Automatic cache invalidation on logout.
### Fully Configurable Messages
Every player-facing string in the mod is exposed as a configurable value via `oneria-messages.toml`:
- Full English translation of all messages out of the box.
- `§` and `&` color code support in all values.
- Reloadable at runtime with `/rpessentials config reload` (no restart required).
- Organized into clear sections: `[System]`, `[Private Messaging]`, `[Warn System]`, `[Last Connection]`, `[Death RP]`, `[Whois]`, `[Player List]`, `[Help]`, `[Profession Restrictions]`.
---
## Commands
> **Permissions:** `OP 2` = OP level ≥ 2; `Staff` = staff role detected by the mod's permission system; `Everyone` = all players.
### Configuration
| Command | Permission | Description |
|:--------|:-----------|:------------|
| `/rpessentials config reload` | OP 2 | Reload all configs and clear caches. |
| `/rpessentials config status` | OP 2 | Display current status of all mod systems. |
| `/rpessentials config set ` | OP 2 | Modify any config option in real-time. |
### Nicknames
| Command | Permission | Description |
|:--------|:-----------|:------------|
| `/rpessentials nick ` | OP 2 | Set a nickname (supports color codes). |
| `/rpessentials nick ` | OP 2 | Reset a player's nickname. |
| `/rpessentials nick list` | OP 2 | List all active nicknames. |
| `/whois ` | OP 2 | Find the MC username and UUID behind a nickname. |
### Licenses
| Command | Permission | Description |
|:--------|:-----------|:------------|
| `/rpessentials license give ` | OP 2 | Grant a functional license. |
| `/rpessentials license giverp ` | OP 2 | Grant a decorative RP-only license with an expiration date. |
| `/rpessentials license revoke ` | OP 2 | Revoke a license. |
| `/rpessentials license list [player]` | OP 2 | List all licenses, or those of a specific player. |
| `/rpessentials license check ` | OP 2 | Check if a player holds a specific license. |
### Warns
| Command | Permission | Description |
|:--------|:-----------|:------------|
| `/rpessentials warn add ` | Staff | Issue a permanent warn. |
| `/rpessentials warn temp ` | Staff | Issue a temporary warn. |
| `/rpessentials warn remove ` | Staff | Remove a specific warn. |
| `/rpessentials warn list [player]` | Staff | List all warns, or all warns for a player. |
| `/rpessentials warn info ` | Staff | Show full details of a warn. |
| `/rpessentials warn clear ` | Staff | Remove all warns for a player. |
| `/rpessentials warn purge` | Staff | Purge all expired temp-warns. |
| `/mywarn` | Everyone | View your own active warns. |
### Last Connection
| Command | Permission | Description |
|:--------|:-----------|:------------|
| `/rpessentials lastconnection ` | Staff | Show last login/logout for a player. |
| `/rpessentials lastconnection list [count]` | Staff | List the N most recent connections (default: 20). |
### Death RP
| Command | Permission | Description |
|:--------|:-----------|:------------|
| `/rpessentials deathrp enable ` | Staff | Toggle Death RP globally. |
| `/rpessentials deathrp player enable ` | Staff | Set a per-player override. |
| `/rpessentials deathrp player reset` | Staff | Remove a player's individual override. |
| `/rpessentials deathrp status` | Staff | Display system state and all active overrides. |
### Roles
| Command | Permission | Description |
|:--------|:-----------|:------------|
| `/rpessentials setrole ` | OP 3 | Assign a role to a player (sets tags + LuckPerms group). |
### Staff
| Command | Permission | Description |
|:--------|:-----------|:------------|
| `/rpessentials staff gamemode [player]` | Staff | Silent gamemode change. |
| `/rpessentials staff tp ` | Staff | Silent teleport. |
| `/rpessentials staff effect ` | Staff | Silent effect application. |
| `/rpessentials staff platform [player] [id]` | Staff | Teleport to a named platform. |
| `/setplatform ` | OP 2 | Create or update a platform entry. |
### Whitelist / Blacklist
| Command | Permission | Description |
|:--------|:-----------|:------------|
| `/rpessentials whitelist add/remove/list` | OP 2 | Manage the blur bypass whitelist. |
| `/rpessentials blacklist add/remove/list` | OP 2 | Manage the always-hidden blacklist. |
| `/rpessentials alwaysvisible add/remove/list` | OP 2 | Manage the never-obfuscated list. |
### Messaging
| Command | Permission | Description |
|:--------|:-----------|:------------|
| `/msg ` | Everyone | Send a private message. |
| `/tell`, `/w`, `/whisper` | Everyone | Aliases for `/msg`. |
| `/r ` | Everyone | Reply to the last person who messaged you. |
### Public
| Command | Permission | Description |
|:--------|:-----------|:------------|
| `/rpessentials schedule` / `/schedule` / `/horaires` | Everyone | View server schedule and status. |
| `/rpessentials help` | Everyone | Display available commands (staff section shown to staff only). |
| `/colors` | Everyone | Display all color codes and formatting options. |
| `/list` | Everyone | Custom player list showing nicknames and real usernames. |
| `/mywarn` | Everyone | View your own active warns. |
---
## Configuration
The mod uses **6 config files** under `config/rpessentials/`, generated automatically on first launch. All files are fully documented with inline comments.
| File | Contents |
|:-----|:---------|
| `rpessentials-core.toml` | Obfuscation, permissions, world border & zones, Death RP, roles |
| `rpessentials-chat.toml` | Chat formatting, markdown, timestamps, join/leave messages |
| `rpessentials-schedule.toml` | Per-day schedule, death hours, HRP hours, welcome message, auto-unwhitelist |
| `rpessentials-moderation.toml` | Silent commands, platforms, last connection, warn system |
| `rpessentials-professions.toml` | Profession definitions and all restriction lists |
| `rpessentials-messages.toml` | All customizable player-facing message strings |
### rpessentials-core.toml
#### [Obfuscation Settings]
| Option | Default | Description |
|:-------|:--------|:------------|
| `enableBlur` | `true` | Master switch for the obfuscation system. |
| `proximityDistance` | `8` | Detection range in blocks (normal). |
| `obfuscatedNameLength` | `5` | Number of `?` characters in the obfuscated name. |
| `obfuscatePrefix` | `true` | Hide LuckPerms rank prefix when obfuscating. |
| `opsSeeAll` | `true` | Staff always see real names. |
| `hideNametags` | `false` | Hide all player nametags above heads. |
| `showNametagPrefixSuffix` | `true` | Show LuckPerms prefix/suffix in nametags. |
| `enableSneakStealth` | `true` | Crouching reduces detection range. |
| `sneakProximityDistance` | `2` | Detection range for crouching players (blocks). |
| `blurSpectators` | `true` | Hide spectator-mode players from the TabList. |
| `whitelist` | `[]` | Players who always see all names clearly. |
| `blacklist` | `[]` | Players who are always hidden. |
| `alwaysVisibleList` | `[]` | Players who are never obfuscated to anyone. |
| `whitelistExemptProfessions` | `false` | Whitelist players bypass profession restrictions. |
#### [Permissions System]
| Option | Default | Description |
|:-------|:--------|:------------|
| `staffTags` | `["admin","moderateur","modo","staff","builder"]` | Scoreboard tags/groups considered staff. |
| `opLevelBypass` | `2` | Minimum OP level to bypass restrictions (0 = disabled). |
| `useLuckPermsGroups` | `true` | Use LuckPerms groups for staff detection. |
| `luckPermsStaffGroups` | `["admin","moderateur","staff"]` | LuckPerms groups treated as staff. |
#### [World Border Warning]
| Option | Default | Description |
|:-------|:--------|:------------|
| `enableWorldBorderWarning` | `true` | Enable distance-based warnings. |
| `worldBorderDistance` | `2000` | Warning trigger distance from spawn (blocks). |
| `worldBorderMessage` | `"..."` | Warning message. Variables: `{distance}`, `{player}`. |
| `worldBorderCheckInterval` | `40` | Check frequency in ticks (40 = 2 seconds). |
| `namedZones` | `[]` | Named zones with entry/exit messages. Format: `name;centerX;centerZ;radius;enterMsg;exitMsg`. |
| `zoneMessageMode` | `"ACTION_BAR"` | Display mode for zone messages: `IMMERSIVE`, `CHAT`, `ACTION_BAR`. |
#### [DeathRP]
| Option | Default | Description |
|:-------|:--------|:------------|
| `globalEnabled` | `false` | Global state of the Death RP system. |
| `whitelistRemove` | `false` | Automatically remove the player from the whitelist on RP death. |
| `deathMessage` | `"..."` | Message broadcast to all players on RP death. Variables: `{player}`, `{realname}`. |
| `deathSound` | `"minecraft:entity.wither.death"` | Sound played on RP death. Use `none` to disable. |
| `deathSoundVolume` | `1.0` | RP death sound volume. |
| `deathSoundPitch` | `1.0` | RP death sound pitch. |
#### [Roles]
| Option | Default | Description |
|:-------|:--------|:------------|
| `roles` | `["admin;admin","modo;modo","builder;builder","joueur;joueur"]` | Role definitions. Format: `roleId;lpGroup`. |
### rpessentials-chat.toml
#### [Chat Settings]
| Option | Default | Description |
|:-------|:--------|:------------|
| `enableChatFormat` | `true` | Enable the chat formatting system. |
| `playerNameFormat` | `"$prefix$name$suffix"` | Player name format in chat. |
| `chatMessageFormat` | `"$time \| $name: $msg"` | Full message template. |
| `chatMessageColor` | `"white"` | Global chat message color. |
| `enableTimestamp` | `false` | Show timestamps in chat. |
| `timestampFormat` | `"HH:mm"` | Java `SimpleDateFormat` pattern for timestamps. |
| `enableMarkdown` | `true` | Enable Markdown support in chat. |
#### [Join / Leave Messages]
| Option | Default | Description |
|:-------|:--------|:------------|
| `enableJoinMessage` | `true` | Enable the join message. |
| `joinMessage` | `"..."` | Join message. Variables: `{player}`, `{nickname}`. |
| `enableLeaveMessage` | `true` | Enable the leave message. |
| `leaveMessage` | `"..."` | Leave message. Variables: `{player}`, `{nickname}`. |
### rpessentials-schedule.toml
#### [Schedule System | Per Day]
Each day of the week (`MONDAY` through `SUNDAY`) has its own fields:
| Option | Default | Description |
|:-------|:--------|:------------|
| `.enabled` | varies | Whether the server is open this day. |
| `.open` | `"18:00"` | Opening time (format `HH:MM`). |
| `.close` | `"23:00"` | Closing time (format `HH:MM`). |
#### [Messages]
| Option | Description |
|:-------|:------------|
| `closingWarningMessage` | Warning message before closing. Variable: `{time}`. |
| `kickMessage` | Kick message. Variables: `{day}`, `{open}`, `{close}`. |
| `serverOpenMessage` | Broadcast message on server open. |
| `serverCloseMessage` | Broadcast message on server close. |
#### [Welcome Message]
| Option | Default | Description |
|:-------|:--------|:------------|
| `enableWelcomeMessage` | `true` | Enable the welcome message. |
| `welcomeMessage` | `["..."]` | Multi-line welcome message with color code support. |
| `welcomeSound` | `""` | Sound played on login (resource location string). |
| `welcomeSoundVolume` | `1.0` | Welcome sound volume. |
| `welcomeSoundPitch` | `1.0` | Welcome sound pitch. |
#### [Death Hours]
| Option | Default | Description |
|:-------|:--------|:------------|
| `enableDeathHours` | `false` | Enable automatic Death RP activation by time slot. |
| `deathHoursSlots` | `[]` | Time slots for Death RP activation. Format: `HH:MM-HH:MM`. |
#### [HRP Hours]
| Option | Default | Description |
|:-------|:--------|:------------|
| `enableHrpHours` | `false` | Enable the HRP hours system. |
| `hrpBroadcastMode` | `"CHAT"` | Display mode: `CHAT`, `ACTION_BAR`, `TITLE`, `IMMERSIVE`. |
#### [Auto-Unwhitelist]
| Option | Default | Description |
|:-------|:--------|:------------|
| `autoUnwhitelistEnabled` | `false` | Enable automatic removal of inactive players from the whitelist. |
| `autoUnwhitelistDays` | `30` | Days of inactivity before removal. |
| `autoUnwhitelistExtraCommands` | `[]` | Extra commands run on removal. Variables: `{player}`, `{uuid}`. |
### rpessentials-moderation.toml
#### [Silent Commands]
| Option | Default | Description |
|:-------|:--------|:------------|
| `enableSilentCommands` | `true` | Enable silent staff commands. |
| `logToStaff` | `true` | Broadcast silent command usage to other staff. |
| `logToConsole` | `true` | Log silent commands to the server console. |
| `notifyTarget` | `false` | Notify the target of the action (disables stealth). |
#### [Teleportation Platforms]
| Option | Default | Description |
|:-------|:--------|:------------|
| `enablePlatforms` | `true` | Enable the platform teleport system. |
| `platforms` | `[...]` | Platform list (`id;DisplayName;dimension;x;y;z`). |
#### [Last Connection]
| Option | Default | Description |
|:-------|:--------|:------------|
| `enableLastConnection` | `true` | Enable login/logout time tracking. |
| `trackLogout` | `true` | Also record disconnection times. |
| `dateFormat` | `"dd/MM/yyyy HH:mm:ss"` | Java `SimpleDateFormat` for stored dates. |
#### [Warn System]
| Option | Default | Description |
|:-------|:--------|:------------|
| `enableWarnSystem` | `true` | Enable the warn system. |
| `notifyOnJoin` | `true` | Notify players of active warns on login. |
| `joinMessage` | `"..."` | Login notification message. Variable: `{count}`. |
| `maxTempDays` | `30` | Max duration for temp warns in days (0 = unlimited). |
| `autoPurgeExpired` | `true` | Auto-purge expired warns on player login. |
| `addedBroadcastFormat` | `"..."` | Staff broadcast on warn add. Variables: `{id}`, `{staff}`, `{player}`, `{reason}`, `{expiry}`. |
| `removedBroadcastFormat` | `"..."` | Staff broadcast on warn remove. Variables: `{id}`, `{staff}`. |
### rpessentials-professions.toml
| Option | Description |
|:-------|:------------|
| `professions` | Profession definitions (`id;DisplayName;§ColorCode`). |
| `globalBlockedCrafts` | Items blocked from crafting for all players. |
| `globalUnbreakableBlocks` | Blocks that cannot be broken by anyone. |
| `globalBlockedItems` | Items that cannot be used or interacted with. |
| `globalBlockedEquipment` | Armor/weapons that cannot be equipped. |
| `professionAllowedCrafts` | Per-profession craft overrides (`profession;item1,item2`). |
| `professionAllowedBlocks` | Per-profession block breaking overrides. |
| `professionAllowedItems` | Per-profession item usage overrides. |
| `professionAllowedEquipment` | Per-profession equipment overrides. |
| `craftBlockedMessage` | Message shown when a craft is blocked. |
| `blockBreakBlockedMessage` | Message shown when block breaking is blocked. |
| `itemUseBlockedMessage` | Message shown when item use is blocked. |
| `equipmentBlockedMessage` | Message shown when equipping is blocked. |
### rpessentials-messages.toml
All player-facing strings are configurable in this file. It is generated automatically on first start and organized into sections:
| Section | Contents |
|:--------|:---------|
| `[System]` | System messages, config error strings |
| `[Private Messaging]` | Private message prompts and notifications |
| `[Warn System]` | All warn notifications, labels, and duration formats |
| `[Last Connection]` | Last connection display strings |
| `[Death RP]` | Death RP toggle and status messages |
| `[Whois]` | `/whois` result messages |
| `[Player List]` | Player list header |
| `[Help]` | All help menu entries |
| `[Profession Restrictions]` | Restriction feedback messages |
---
## Data Storage
All persistent data is stored in the world folder. Files are human-readable JSON and can be edited manually. Keys use the `UUID (McUsername)` format for readability.
| File | Contents |
|:-----|:---------|
| `world/data/rpessentials/nicknames.json` | Player nicknames |
| `world/data/rpessentials/licenses.json` | Player licenses |
| `world/data/rpessentials/license-audit.json` | License audit log |
| `world/data/rpessentials/licenses-temp.json` | Temporary (RP) license registry |
| `world/data/rpessentials/warns.json` | Player warns |
| `world/data/rpessentials/lastconnection.json` | Player connection history |
> All saves are **asynchronous**. All loads are **synchronous** at server startup.
---
## LuckPerms Integration
LuckPerms is **optional**. The mod works fully without it, with graceful fallback:
- Without LuckPerms: staff detection falls back to scoreboard tags and OP levels. Prefix/suffix display is disabled.
- With LuckPerms: full integration with prefixes, suffixes, groups, and permission nodes.
- All LuckPerms-dependent features are silently skipped when the mod is absent.
---
## Performance
- Permission checks: 30-second cache (~90% overhead reduction).
- Profession restriction checks: ~0.1ms per check (cached) (most of the verification is now event-based so almost no impact).
- License database queries: ~0.5ms (with caching).
- Network sync: ~1KB packet per player on login.
- Cache cleanup runs every 20 seconds to prevent memory leaks.
- Nametag block occlusion: zero raycast overhead, handled entirely by GPU depth test.
- **Estimated total overhead: <1% CPU usage on active servers.**
---
## Technical Information
| Field | Value |
|:------|:------|
| Mod ID | `rpessentials` |
| Group ID | `net.rp.rpessentials` |
| Version | 4.1.10 |
| MC Version | 1.21.1 |
| NeoForge | 21.1.219+ |
| Java | 21 |