π¬ PolaroidMail
Asynchronous mail for Paper. Players send each other letters with items and money; staff send server-wide announcements and rewards. Nothing has to be online at the same time.
Requires Paper 1.21.11+ and Java 21+.
Pages
| Page | What's in it |
|---|---|
| Installation | Setup, optional plugins, files created |
| Commands & Permissions | Every command and permission node |
| Configuration | config.yml, from top to bottom |
| Messages | messages.yml, colours and placeholders |
| Appearance | menus.yml and items.yml |
| Server Mail | Pre-written mails, rewards, welcome mail |
| Mailbox Block | The placeable mailbox, holograms, ModelEngine |
| Custom Items | Items from Nexo, ItemsAdder, MythicMobs and more |
| Placeholders | PlaceholderAPI and every config placeholder |
| Discord Logging | Mirroring mail activity into a channel |
| Bedrock | Geyser and Floodgate players |
How it works in one minute
A mail is a database row, not a delivery. It waits until the recipient claims it, whether that takes five seconds or five months. That single fact explains most of the design:
- You can mail anyone who has joined the server before, online or not.
- Items and money live inside the mail until claimed. They are not in anyone's inventory in the meantime.
- Claiming is all or nothing: a mail whose contents do not fit is left untouched, and the player is told how much room to make.
- Unclaimed mail can expire, and by default it goes back to whoever sent it rather than being destroyed.
Quick start
- Drop the jar in
plugins/and restart. - Run
/mail. That's the whole player experience. - Optional:
/mail give-mailbox <player>to hand out a physical mailbox.
Everything else is configuration.
Sending, step by step
/mail β drop items in the slots β "Write letter" β fill the form β Send
The form asks for recipient, subject, message and money, in that order. If something is wrong β unknown player, not enough money, still on cooldown β the form stays open and the error goes to chat, so nothing you typed is lost.
Your items are safe from the moment you open the form: they are written to disk while the dialog holds them. A crash, a restart or a disconnect mid-letter returns them the next time you join.