mc.pvpers.us
Online
← The Frontier Suite

FrontierMail

v1.0.0QoL

Offline text mail and a per-player item mailbox.

What it does

Short text messages (/mail) and a per-player item mailbox (/mailbox) that other players — and other Frontier plugins — can drop items into while the recipient is offline.

Two design choices keep items safe: /senditem removes the stack from your hand only after it has been written to the recipient’s mailbox, so a full mailbox never eats an item; and /mailbox is a chest GUI where whatever you drag out is yours and whatever you leave stays mailed — nothing is auto-dumped into your inventory, so a full inventory can’t spill mail onto the ground. Everything is stored per player as a JSON file: no database, nothing to configure beyond two limits.

Requires & integrates with

Required
Paper 26.2+, Java 25+
Optional
None.
Used by
FrontierEvents (mails event payouts that don’t fit or are owed to an offline player, as "Event Rewards") · FrontierReputation (mails daily-login reward items that overflow the inventory, as "Daily Reward"). FrontierShop does not use it — the market keeps its own mailbox.

Commands

All three commands are player-only. Names tab-complete from the online list, but any player who has ever joined is accepted.

CommandWhoWhat it does
/mail send <player> <message…>EveryoneSend a text message. Recipient must have played before (or be online); online recipients are pinged immediately
/mail readEveryonePrint all stored messages (newest last, (new) marker on unread) and mark them all read
/mail clearEveryoneDelete all of your messages
/mailboxEveryoneOpen your item mailbox GUI. Items you take out are removed; items you leave stay
/senditem <player>EveryoneMail the stack in your main hand. Refuses on empty hand, self-send, or a full mailbox

Permissions

Player features default to true, staff features to op. Every node follows frontier.<plugin>.<action>, so a LuckPerms setup is e.g. lp group default permission set frontier.shop.use true. Wildcards work: frontier.reputation.*.

NodeDefaultGrants
frontier.mail.usetrue/mail, /mailbox
frontier.mail.senditemtrue/senditem

Config reference

File

plugins/FrontierMail/config.yml

To apply changes

Restart required — values are read on use, so /reload confirm also works

KeyDefaultWhat it controls
max-messages50Maximum stored messages per player. At the cap the oldest message is silently dropped to make room (FIFO), so mail is never refused — only forgotten
notify-on-jointrueSend "You have N unread messages / N items" 2 seconds after a player joins
max-mailbox-items27Maximum items in a player’s mailbox. Unlike messages, a full mailbox refuses new items: /senditem tells the sender it’s full and plugin deliveries fall back to their own handling. The GUI grows in 9-slot rows up to 54; values above 54 are stored but only the first 54 show at once

Good to know

  • +Storage is plugins/FrontierMail/data/<uuid>.json, one file per player holding messages and items. Files are read on demand and rewritten after every change; there is no cache and no save-on-shutdown step.
  • +Item mail keeps enchantments, names, lore and custom data intact through the round-trip; only exotic items with genuinely fractional or very large numeric fields can lose precision.
  • +"Has never played on this server": send and senditem require the recipient to have joined at least once under that exact name. Offline-mode servers and name changes can make the lookup miss.
  • +Timestamps in /mail read use the JVM default timezone. Rearranging items inside the mailbox before closing can shuffle the remembered "from" between items — the items themselves are always correct.

Looking for something specific? Search the whole suite.