Skip to content

Player and Social Features

Alex Baldry edited this page Aug 8, 2026 · 2 revisions

🎮 Player and social features

Chat and item links

Rivet formats Paper chat with MiniMessage. Player names and messages are inserted as safe components, so players cannot smuggle commands or click events into the server's chat format.

Players can type [item] or [i] in chat to show the item in their main hand. The result displays the item's real name and a hover card. An empty hand appears as [Empty Hand].

The main format lives in settings/chat.yml:

format: "<gray><player>:</gray> <white><message></white>"

/me <message> sends an action message to every online player who can see the sender and has not ignored them. Text is plain by default. Players with rivet.me.format may use safe colours and decorations, but cannot add clicks, hover text or commands.

Private messages, replies and ignore lists

/msg sends a private message and records both players as reply partners. /r continues that conversation while the other player remains online and visible.

Ignore lists are persistent and only affect private messages:

/ignore Alex       # toggle Alex
/ignore list
/ignore clear

A sender with rivet.ignore.bypass can still deliver the message. The recipient is not told whether a failed delivery was caused by an ignore entry.

Social spy is also persistent. A spy sees the sender, recipient and message when all of these are true:

  • /socialspy is enabled for that staff member.
  • They still have rivet.socialspy.
  • They are neither the sender nor the recipient.

Chat colours

/chatcolor stores one safe formatting tag per player and applies it to future public chat messages.

/chatcolor <aqua>
/chatcolor <#55ffff>
/chatcolor <gradient:blue:aqua>
/chatcolor <rainbow>
/chatcolor reset

Named colours and hex colours count as normal colour tags. Gradients and rainbow require rivet.chatcolor.advanced. The server owner can independently disable hex, gradient or rainbow support.

Nicknames

Nicknames replace the player's display name used by Rivet chat and compatible Paper components. They are stored by UUID and survive restarts.

  • Default maximum visible length: 24 characters.
  • Control characters are rejected.
  • Plain nicknames need rivet.nick.
  • Colour and decoration tags need rivet.nick.format.
  • Changing another online player's nickname needs rivet.nick.others.
  • /nick off restores the real account name.

AFK indicators are appended after the nickname, so the two features do not fight over the display name.

AFK status

Players can toggle AFK manually or be marked automatically after the configured idle time.

Activity is detected from:

  • moving to another block;
  • movement input, jumping, sneaking or sprinting;
  • interacting;
  • chatting;
  • running any command other than /afk or /afkcheck.

Returning activity clears AFK immediately. AFK players can be excluded from the sleep count, and an optional indicator is added to their display name.

Examples:

/afk
/afk grabbing lunch
/afk -p:Alex checking logs
/afk -p:Alex -s
/afkcheck all

The -p: and -s flags can appear anywhere in the command. -p: targets an online player; -s prevents a public broadcast.

Homes and public warps

Homes belong to a player's UUID. Warps are shared by everyone.

/sethome
/sethome mine
/home mine
/delhome mine

/setwarp market
/warp market
/delwarp market

Saved locations include world, precise coordinates, yaw and pitch. If a destination is in a tracked test world that is not loaded, Rivet loads that world before teleporting.

Names are case-insensitive after saving and may use letters, numbers, _ and -, up to 32 characters.

Spawn and teleport requests

Rivet's server spawn is separate from each world's native spawn.

  • /setspawn stores the server spawn.
  • /spawn uses an optional warm-up and can cancel when the player moves.
  • The server can send players to spawn on every join or only their first join.

TPA supports both directions:

  • /tpa Alex asks to move you to Alex.
  • /tpahere Alex asks to move Alex to you.
  • /tpaccept [player] accepts a request.
  • /tpdeny [player] rejects it.

Requests expire automatically. Sending has a cooldown, and accepted teleports can use a movement-cancelled warm-up. Requests are cleared when either player logs out.

Random teleport

/rtp searches around the selected world's spawn. Chunk generation is asynchronous; final safety checks happen on the server thread.

A destination must have:

  • solid, non-dangerous ground;
  • two passable blocks for feet and head;
  • no liquids in those spaces;
  • an allowed biome;
  • a position inside the world border;
  • a Y level below the configured Nether ceiling when used in the Nether.

The built-in dangerous-ground list includes lava, fire, magma blocks, cactus, campfires, sweet berry bushes, powder snow and water. RTP supports global radii, per-world radius overrides, biome allowlists and denylists, a persistent cooldown and movement cancellation during warm-up.

Nearby players

/near only searches the sender's current world. Results:

  • exclude the sender;
  • respect vanish and Paper visibility through canSee;
  • optionally exclude spectators;
  • are sorted nearest first;
  • stop at the configured maximum.

The default radius is 100 blocks and the default maximum is 10 results.

Backpacks

Each player has persistent personal storage opened with /backpack or /bp.

The visible size is the configured default or the highest row permission the player has:

rivet.backpack.rows.1
rivet.backpack.rows.2
...
rivet.backpack.rows.6

Rivet always keeps a 54-slot saved record. If a player loses a row permission, items in hidden rows are retained and become visible again when the permission returns. Blocked worlds can prevent opening a backpack without risking its contents.

Item pickup filter

The filter blocks automatic pickup by material. Item names, lore, enchantments and other metadata do not create separate filter entries.

The GUI supports:

  • click an entry to remove it;
  • add the held item;
  • enable or disable filtering;
  • shift-click to confirm clearing the list;
  • next and previous pages for large lists.

Blocked pickups can show an action-bar message and an optional sound. Feedback is rate-limited so a pile of filtered items does not spam the player. Worlds in blocked-worlds disable filtering entirely while the player is there.

Statistics

/stats reads Paper's built-in player statistics. It does not maintain a separate tracking database.

The default display includes:

  • playtime;
  • deaths and player kills;
  • mob kills and jumps;
  • blocks broken and placed;
  • combined walking, sprinting, swimming, flying and elytra distance;
  • time since first join.

The header and lines are fully configurable in settings/statistics.yml.

/playtime [player] is the quick version when only playtime is needed. It reads Paper's native playtime statistic and can inspect a known offline profile. Looking up another player needs rivet.playtime.others.

Help, player list and ping

/help [page] builds its pages from the commands the sender can actually use. Disabled modules and commands without permission are hidden. Pages are alphabetical, navigation is clickable, and the page size and text live in settings/help.yml.

/list shows only players visible to the sender, sorts their account names, and displays their current display names. The total therefore respects vanish and Paper visibility.

/ping [player] reports the live Paper latency with a configurable message and one of four built-in quality labels:

Ping Label
Under 75 ms Excellent
75–149 ms Good
150–249 ms Fair
250 ms or higher Poor

Checking another visible online player needs rivet.ping.others.

Join messages and welcome content

settings/join-leave.yml controls:

  • normal join messages;
  • a separate first-join message;
  • quit messages;
  • a welcome title and subtitle;
  • a private welcome chat line;
  • a multi-line MOTD sent after joining.

Each part can be turned on or off independently and supports MiniMessage.

Portable utilities and poses

The /craft, /anvil, /smithing, /stonecutter and /grindstone commands open real Paper interfaces at the player's location. Each interface has its own switch in settings/utilities.yml.

/jump teleports to a safe standing position on or next to the block in the player's crosshair. It searches only as far as jump.maximum-range and refuses a destination without safe ground and two blocks of clearance.

/ride mounts the targeted living entity or vehicle. Running it while mounted dismounts instead. Armour stands, occupied targets and the player themselves are rejected. Player targets are disabled by default; enable ride.allow-players if they are wanted. Rivet also dismounts managed riders when they teleport, die, leave or the plugin stops.

/sit, /lay and /crawl use Paper's native forced poses. No invisible seat entities are created. A pose ends when the player moves, teleports, takes damage, logs out or runs the same pose command again. Servers can restrict poses to an allowlist of worlds.

Wearing held items

/hat swaps the main-hand stack with the helmet slot. This is a real swap, so an existing helmet moves back into the player's hand instead of being dropped or overwritten. An empty hand is rejected.

Trash

/trash opens a configurable 1–6 row inventory. Its contents are cleared when the inventory closes.

Warning

The trash inventory is deliberately destructive. Items left inside it cannot be recovered by Rivet.

Clone this wiki locally