Cosmetic crates are one of the few reward systems that survive every EULA review, every economy rebalance, and every “this server is pay-to-win” thread. They also fail quietly: keys pile up unclaimed, odds get misconfigured, a duplicate reward wipes a player’s only cosmetic, and nobody notices until a ticket arrives. This guide is written to help server owners build a monthly cosmetic crate cycle that runs itself and can be audited when something goes wrong.
It is aimed at owners and administrators running Paper or Spigot on 1.20 and 1.21, plus the staff who actually answer the tickets. Everything here was assembled from reading the ExcellentCrates documentation, tracing how permissions load in the public source, and testing a four-item crate on a small survival world before writing any command down. No drop-rate or retention numbers are claimed here, because server populations differ too much for those figures to mean anything.
Why Cosmetic-Only Crates Keep You EULA-Safe
The Minecraft EULA and Mojang’s commercial usage guidelines draw the line at selling gameplay advantage. Selling a hat, a particle trail, or a pet that follows you around is fine. Selling a crate that can drop Protection IV books, spawners, or extra homes is not. That single distinction is what makes an automated crate cycle safe to run every month without a legal review each time.
The safest design is one where the crate never touches the item economy at all. Instead of granting enchanted gear, grant permission nodes that unlock a cosmetic in a plugin like HeadDatabase, CosmeticsCore, or a rank-based wardrobe. Players see the reward in the preview, the cosmetic appears in their menu, and the survival economy never sees a single drop. Our deeper breakdown lives in [EULA-Friendly Monetization: Funding a Minecraft Server Without Pay-to-Win], and the cosmetic plugin comparison is in [The Best Minecraft 1.21 Cosmetic Plugins].
A monthly crate also gives you something a shop cannot: a reason to log in that is not tied to spending money. Free keys for everyone, cosmetic-only loot, and no stat advantage means the feature reads as a gift from the server rather than a paywall. Keep a paid tier if you want, but never let the paid keys roll a different loot table than the free ones.
Installing ExcellentCrates and Reading the Folder Layout
ExcellentCrates is a free, actively developed crate plugin with a visual editor, opening animations, and native PlaceholderAPI support. Download the jar from the project’s GitHub releases, drop it into plugins/, and restart rather than reload. Once it generates its folders, you will be working in four places:
- config.yml — global defaults: key storage, message prefix, whether keys are physical items or virtual balances, and the update checker.
- crates/<crate>.yml — one file per crate. This holds the display name, the preview GUI layout, the loot list with weights, and any animation assignment.
- animations/ — the opening sequences. Stock options such as instant, roll, and csgo are usually built in; custom animation files go here if you install or write one.
- lang/ — message files. Edit these before launch so the crate does not announce itself with default text.
Keep the crate folder under version control. A git repository with one commit per monthly rotation costs nothing and gives you a one-command rollback later. Install PlaceholderAPI alongside it, because everything that follows depends on placeholders for playtime, vote counts, and permission checks.
Building the Monthly Key Delivery Loop
A crate nobody can open is decoration. Pick one delivery method and automate it; do not stack three half-finished ones.
Playtime, votes, or calendar
- Calendar: every player online at the reset gets one key. Simplest, fairest, and easy to explain. Use the server scheduler or a panel scheduled task to run the give command at a fixed UTC time.
- Playtime: grant a key per ten hours played, checked with a PlaceholderAPI placeholder. Rewards engagement but quietly punishes casual players.
- Vote: grant a key per vote through your vote listener. Best for servers still building a listing presence, worst for servers with low vote traffic.
Whichever you choose, anchor the schedule to UTC and write the offset down. A monthly task set for “first of the month, 00:00 local” drifts by an hour twice a year wherever daylight saving applies, and players notice when the crate opens at 11 p.m. instead of midnight. Run the reset at 00:00 UTC, which is stable year-round, and let players convert it themselves.
Always keep a manual fallback. If the scheduled task fails, an admin runs the same command by hand from console and announces it in Discord. Document the exact command and the required permission in your staff notes, and test it on a staging server before you need it.
Designing a Loot Table With Weights, Duplicates, and Pity
Weights are relative, not percentages, but keeping the total at 100 makes the table readable to staff and to players reading your preview GUI. A four-item monthly cosmetic crate might look like this:
| Reward | Type | Weight | Notes |
|---|---|---|---|
| Autumn leaf trail | Permission node | 50 | Common; safe duplicate, becomes a reroll token |
| Fox companion pet | Permission node | 30 | Uncommon; duplicates refunded as keys |
| Halo cosmetic | Permission node | 15 | Rare; one-time unlock flag |
| Monthly banner cape | Permission node | 5 | Chase item; pity protection after 20 opens |
Two rules protect the table from feeling unfair. First, handle duplicates explicitly: either flag the reward as one-time and swap already-owned results for a reroll token, or refund the key automatically. Second, add pity protection on the rarest entry so a player cannot open forty crates and walk away with nothing new. Implement it as a stored counter per player, incremented on each open and reset when the chase item is granted; the crate config then checks the counter and forces the rare reward.
Resist the urge to add fifteen entries. Four to six rewards keep the preview readable on a phone-sized GUI and make the monthly changelog short enough that players actually read it. If you want variety, rotate the whole table each month instead of bloating it.
Presentation, Audit Logs, and a Rollback Plan
Players judge a crate by its preview, not its config. Build the preview GUI so every reward is visible before a key is spent, and label rarity with color and lore text rather than relying on the item name alone. Pick an opening animation that finishes in a few seconds — a long roll is delightful once and irritating on the tenth open — and pair it with a broadcast that is filtered so a busy server does not drown in rare-drop spam.
Feedback matters as much as animation. Tell the player what they won, whether it was a duplicate, and where to equip it. A crate that silently grants a permission node and says nothing is a support ticket waiting to happen.
On the operations side, log every grant. ExcellentCrates writes to console; pipe that into a file, or mirror grants to your admin log channel with a plugin hook. Keep a monthly rotation spreadsheet with the crate file hash, the rewards, and the date. If a crate is misconfigured and grants a chase item to everyone, the rollback is:
- Stop the crate immediately by removing the key from the source and disabling the open command.
- Revert the crate YAML from git to the last known-good commit and reload the plugin.
- Remove the wrongly granted permission node in bulk through your permissions plugin, then re-grant it only to players with a valid log entry.
- Announce what happened, what was revoked, and what compensation players receive. Silence erodes trust faster than the bug did.
Pros and Cons of Automated Monthly Crates
Pros: the cycle runs without staff intervention; cosmetics are EULA-safe by construction; a predictable monthly beat gives lapsed players a reason to return; the permission-based model survives plugin changes and economy resets; and version-controlled configs make mistakes reversible.
Cons: automation hides failures until players complain; permission nodes are invisible unless you build a wardrobe GUI; duplicate handling needs a counter you must maintain; the monthly rotation becomes a recurring chore; and if the crate is the only content update players see, a thin month is very visible.
Common Mistakes and How to Avoid Them
- Mixing gameplay items into a cosmetic crate. One enchanted book in the loot list turns a safe feature into a policy problem. Split crates by purpose, permanently.
- Granting physical items when a permission works. Items get lost, duped, and traded. A permission node cannot be duplicated in a chest.
- Testing with an admin account. Admins usually bypass permission checks, so an already-owned reward never triggers. Test on a normal player account.
- Scheduling in local time. Monthly tasks drift with daylight saving. Anchor to UTC.
- No manual fallback command documented. When the scheduler fails at midnight, staff should not be reading plugin docs for the first time.
- Rotating rewards without a changelog. Players will ask why last month’s cape is gone. Answer before they ask.
Frequently Asked Questions
Yes. The EULA prohibits selling gameplay advantage, not cosmetics. Keep every reward cosmetic, keep the same loot table for paid and free keys, and keep an in-game way to earn keys.
Not strictly, but a permissions plugin is strongly recommended. It lets the crate grant a node instead of an item, so cosmetics cannot be lost, duped, or traded, and it makes bulk rollback possible.
Monthly works well for most servers. Four to six rewards per rotation keeps the preview readable and the changelog short, and it gives players a predictable reason to check in.
Yes. Use the plugin or panel scheduled task feature to run the give command at a fixed UTC time, and keep a documented console command as a manual fallback.
Build It Once, Then Let It Run
A cosmetic crate cycle is one of the few systems that pays back setup time every month. Install the plugin, put the crate files in git, anchor the schedule to UTC, keep the loot table cosmetic-only, and write the rollback steps down before you need them. The first rotation will surface problems; the third will run without you touching it.
If you are pairing crates with a recurring supporter tier, read [Recurring Revenue: Running a Subscription Rank Model] next, and keep the crate cosmetic-only in both places. Then test the preview GUI on a player account, schedule the first reset, and put the fallback command in your staff channel today.

Leave a Reply