Optimised virtual crates & lootboxes plugin.
EdCrates
Crates that open 1,000,000 keys at once, lootboxes with animations, and menus you design yourself
Works with PinnaPrison • EdPrison • EdTools • EdDungeons • Vault • PlaceholderAPI - or standalone
📖 Documentation | 💬 Discord Support
What is EdCrates?
EdCrates is a crates plugin built for servers where players hold hundreds of thousands of keys. Keys are a virtual balance, never an item, so a player can press Q on a crate and open every key they own in one go: the roll runs off the main thread, the rewards are collapsed into totals, and every reward is granted once with the total attached. Ten thousand keys that hit the same token reward is one economy call, not ten thousand.
Lootboxes are the physical side: an item you hand out, right-click in the air or on a block, and watch open with a world animation, one at a time. Chests that rise around you and open when you click them, a box that floats up and bursts into its rewards, a fountain, an orbit.
Every menu is a GUI file you own. Crate icons, previews, confirmations and any extra menu you want are plain YAML with items, slots, click actions and custom items, the same system PinnaPrison uses.


Features
Bulk opening without limits - press Q to open every key. Any amount rolls instantly: above a small threshold the reward counts are sampled straight from the distribution, so a billion keys cost the same as a thousand and the odds stay exact.
Virtual keys - a balance per crate per player, stored in YAML, SQLite or MySQL. Give keys to offline players, keys follow players across a network.
One action per reward - currencies, enchant levels, keys and any command with {amount} scale with the roll count. No command spam, no lag, no item floods.
Lootboxes - physical items, opened one by one with a right click. No balance, nothing to place, previewed in the menu. Right-click a block and the animation plays on that block.
4 world animations - Chests (a ring of chests you click open, decoys for the ones you did not pick, auto-open countdown), Lootbox (rise, spin, burst), Fountain (rewards shoot up and land in a row) and Orbit (rewards circle you and snap into a line). Keyframed display entities, a handful of packets per animation, visible only to the opener or to everyone.
2 GUI animations - a decelerating roulette and a flicker reel, with the other rewards of a multi-reward open revealed next to the winner.
Animations are presets - every timing, radius, scale, sound and particle in animations.yml. A crate just names the preset. Players can toggle animations off.
Physical crates - a scaled head in the world with a smooth spin-and-bob idle animation, a pop-in when placed, and a per-player hologram that shows YOUR key count and cycles through the rewards.
GUI files - every menu is a file in guis/: title, rows, items with slot ranges, requirements, live update intervals, click cooldowns, main-menu back navigation, pagination, and click actions (open-gui, open-crate, preview, commands, sounds, messages...). Make as many menus as you like.
Custom items - crate icons, preview icons, toggles, confirm buttons and open-gui buttons are custom-item types you drop into any GUI file. Other plugins can register their own.
Reward previews - paged automatically, pinned slots if you want them, chance display, and players can click a reward to switch it off for themselves so it never rolls for them (per crate and per reward configurable).
Multiple pools - a crate draws from several reward lists with their own roll counts: 4 exclusive rewards and 1 jackpot per open, guaranteed.
Bulk confirmation - ask before opening more than N keys, with a per-player toggle.
Cooldowns, permissions, hidden rewards, announcements - per crate and per reward.
Colours - legacy codes, hex colours and gradients in every text, plus PlaceholderAPI placeholders everywhere.
Test crate & simulator - a shipped crate with one reward per action type, and /edcrates simulate to print the real distribution of a million rolls against the configured odds.
Developer API - register reward actions, economies, custom GUI items and pagination sources; open and key events.


Reward actions for your economy
Rewards are one line each. The generic currency action pays into whichever hooked plugin knows the currency; the plugin-specific ones cover the rest.
PinnaPrison - currencies (boosted or not), booster items and direct boosters, drills, crystals, random crystals, bombs, ability items, enchant levels, level tracks, crystal slots, pickaxe skins, backpack attachments.
EdPrison - every currency and level track, pickaxe enchant levels.
EdTools - currencies, tool enchants, level tracks, lucky blocks, tools, backpack items, boosters.
EdDungeons - currencies, sword enchants, level tracks, boosters.
Vault - money.
Built in - keys of any crate, commands (console or player) with {amount} totalled, items, XP, messages, broadcasts, titles, action bars, sounds, permissions, per-action chances.
pools:
main:
rolls: 1
rewards:
tokens:
weight: 1800
rarity: common
actions:
- 'currency:tokens 3500000' # one add of 3,500,000 x times rolled
display:
material: MAGMA_CREAM
name: '&f&l3,500,000 &r&4┃ &r&c&lTokens &r&a&lCOMMON REWARD'
perk-tickets:
weight: 120
rarity: legendary
announce: true
actions:
- type: command
amount: 150 # per roll; a bulk open sends ONE command
value: 'edperks tickets give {player} {amount}'
display:
material: ENDER_EYE
name: '&f&l150x &r&8┃ &r&6&lPickaxe Perks &r&6&lLEGENDARY REWARD'
Lootboxes & animations
Mark a crate type: lootbox and it becomes an item. /edcrates givelootbox <player> <lootbox> <amount> hands it out, a right click opens one. Pick the animation by name:
chests - chests rise out of the ground in a ring around the player. Each click pops one open and a reward floats out with its name. One chest per roll, or the classic "pick one of five" with decoys. A countdown on the holograms opens the rest by itself.
lootbox - the box pops up, floats, spins faster and faster, collapses and bursts into its rewards fanned out with name tags.
fountain - the box opens and fires its rewards up one after another; they arc and land in a row with name tags.
orbit - the rewards circle the player, accelerating, then snap into a line.
roulette / flicker - inventory reels for classic key crates.
Everything is display-entity interpolation: one keyframe per movement, never a packet per tick. Choose whether only the opener sees it or everyone nearby does.
chests:
type: CHESTS
only-opener-sees: true
chests: 5
picks: all
radius: 2.4
hologram-text: '&e&lClick to open! &7({seconds}s)'
auto-open-seconds: 15
decoys: true
sounds:
spawn: 'BLOCK_CHEST_OPEN 0.8 1.0'
reveal: 'ENTITY_PLAYER_LEVELUP 0.9 1.4'
particles:
reveal: TOTEM_OF_UNDYING


Menus you design
The crate selector, the previews and the confirmation are files in guis/, and you can add any number of your own. Items have slots, requirements, live placeholders, click sounds and click-action lists. A crate icon is one custom item:
items:
rusty:
custom-item:
type: crate # left opens one, right previews, Q opens everything
crate: rusty
slot: 11
material: OAK_BOAT
name: '&6&lRusty &r&e&lKey &r&7[Tier #1]'
lore:
- '&7You have &e&n{keys}&r&7 of these keys to open.'
- ''
- ' &6| &r&7Left Click: &r&6Open Key'
- ' &6| &r&7Right Click: &r&6Preview Crate'
- ' &6| &r&fUse &r&6[Q] &r&fto redeem &r&e&n{keys}&r&f keys.'
shop:
slot: 40
material: EMERALD
name: '&aKey Shop'
requirement: 'permission edcrates.shop'
left-click-actions:
- 'open-gui key-shop'Support
Join the Discord for support, suggestions and updates: https://discord.gg/7RapfdQ7VH