FrontierMail
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.
| Command | Who | What it does |
|---|---|---|
| /mail send <player> <message…> | Everyone | Send a text message. Recipient must have played before (or be online); online recipients are pinged immediately |
| /mail read | Everyone | Print all stored messages (newest last, (new) marker on unread) and mark them all read |
| /mail clear | Everyone | Delete all of your messages |
| /mailbox | Everyone | Open your item mailbox GUI. Items you take out are removed; items you leave stay |
| /senditem <player> | Everyone | Mail 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.*.
| Node | Default | Grants |
|---|---|---|
| frontier.mail.use | true | /mail, /mailbox |
| frontier.mail.senditem | true | /senditem |
Config reference
File
plugins/FrontierMail/config.yml
To apply changes
Restart required — values are read on use, so /reload confirm also works
| Key | Default | What it controls |
|---|---|---|
| max-messages | 50 | Maximum 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-join | true | Send "You have N unread messages / N items" 2 seconds after a player joins |
| max-mailbox-items | 27 | Maximum 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":
sendandsenditemrequire 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 readuse the JVM default timezone. Rearranging items inside the mailbox before closing can shuffle the remembered "from" between items — the items themselves are always correct.
← Previous
FrontierGraves
Permanent graves — keep your inventory on death, claim it later
Next →
FrontierTrade
Safe two-sided trade GUI
Looking for something specific? Search the whole suite.