Plugins / Crates
Crates
Crates that open in the world, on item displays, with every real chance shown before a key is spent.
Get Crates
$13.99 on BuiltByBit, list price on 16 October 2026. BuiltByBit sales can lower it, the listing shows the current price.
Also in Complete Collection: Every Plugin, SMP Starter Bundle.
Try it live
Crates runs on a public demo server, set up so you can use it yourself. Join, try it, then decide.
Address: try.zeropvp.xyz:25570 (Java Edition 1.21.11)
In Minecraft: Multiplayer, Add Server, paste the address, Join. Type /demo go crates to land at its booth, or right-click the compass and pick it. The world resets every night.
Overview
Crates
Crates players trust: the real chances shown before a key is spent, and a draw they can watch
Most crate plugins are a chest menu full of glass panes and a percentage nobody can verify. This one opens in the world on item displays, tells the player every reward and its real chance before they spend anything, and rolls the reward before the animation starts, so a disconnect in the middle of a spin cannot eat it.
A crate opening in the world, on item displays, no chest menu.
- Latest version
- 1.1.1
- Server
- Paper or Purpur, Java 21
- BuiltByBit
- Crates on BuiltByBit
What changed in 1.1.1
- Fixed: the preview screen showed no picture for an enchanted golden apple. Minecraft has no separate texture for it (it draws the golden apple with a glint), so the icon lookup found nothing. It now shows the golden apple picture.
- The same fix covers about 390 other items that had no picture in the preview: glass panes, tall flowers like the sunflower, the crossbow, tipped arrows, stairs, slabs, walls, fences, buttons, carpets, waxed copper, and full blocks such as TNT, ancient debris, pumpkins and crafting tables.
- Beds, banners, chests, mob heads and copper golem statues still show no picture in the reward list, because the game draws them as 3D models with no flat texture. The reward tiles show the real item as before.
- Nothing to change in config.yml or crates.yml.
Features
Why server owners pick it
- Every reward and its real chance shown up front
- Opens in the world on item displays, not a chest menu
- The reward is rolled before the animation, so a disconnect cannot eat it
- Virtual keys
- No dependencies
Opening the Legendary Crate: the rewards cycle on top of the chest.
What makes it different
- Every reward and its real chance is shown before a key is spent
- The reward is rolled before the animation starts, so a disconnect in the middle cannot eat it
- Keys are stamped in their item data, so a renamed item opens nothing
Works with
- Paper or Purpur 1.21+ (tested on 1.21.11)
- Java 21
- No other plugin, no database, no library
- No DRM, no licence key and no licence server; the code is not obfuscated
What you get
- New in v1.2.0: Key all: /crate giveall gives every online player a key at once, as items or onto their accounts
- New in v1.2.0: Mass open: players with several keys open up to 10 at once with one summary line
- New in v1.2.0: PlaceholderAPI (optional): key counts per crate for scoreboards and holograms
- Opens in the world: the draw happens above the crate on item displays, with sound and particles, not behind an inventory screen
- Three ways to open: a roulette that slows down as it lands, an orbit of the possible rewards, or instant for a server that does not want a show
- Real chances, shown: rewards carry weights, and the preview screen turns them into percentages, so nobody has to trust a number in a description
- Keys that cannot be faked: a key is stamped in its item data, so a renamed tripwire hook does not open anything
- Virtual keys for your store: /crate givevirtual works while the buyer is offline, and they open the crate from the screen wherever they are
- Rewards are items, commands, or both, with an optional message, and an announcement to the whole server for the rare ones
- Built in game: hold an item, press add, and it is a reward. Bind any block as the crate. No YAML unless you want it
- A label over every crate built from display entities, cleaned up properly after a crash
- The crate block is protected: only an admin sneaking can break it
Two crates at spawn, each with its own label.
The crate screens
The preview shows every reward with its real chance.
Admins add the item in hand as a reward and set its weight in game.
- /crates opens a real Minecraft dialog window with every crate, how many keys you hold, and what each one holds
- The preview screen lists every reward with its percentage, marks the ones that announce, and offers a one-click open when you have a virtual key
- Left-click or sneak-click a crate in the world for the same preview, without spending anything
- Admins get a manage screen: create a crate, add the item in your hand as a reward with a weight, set weights, mark a reward rare, use your held item as the key, bind the block you are looking at, and cycle the animation
- Everything the plugin says is in config.yml, in MiniMessage
FAQ
Which servers does it run on?
Paper or Purpur 1.21.11 or a newer 1.21.x, with Java 21.
Do I need other plugins?
No. It runs on its own.
Is there DRM or a licence key?
No. There is nothing to activate and no licence server to reach, and the code is not obfuscated.
How long does setup take?
Drop the jar into /plugins and restart. The setup guide above has 5 short steps.
Can I try it before I buy?
Yes. This page has a test server with the plugin installed.
Where do I get help?
In the active support Discord, in the discussion tab on this page, or in the documentation.
Can I run a key-all event?
Yes. /crate giveall gives every online player keys at once and works from the console.
Updates
Released on September 17, 2026 and updated 4 times since. The latest version is v1.2.0 (October 16, 2026). Every update is free, new Minecraft versions included.
Also by Frostyh
- Holograms: floating text and boards
- Graves: death chests with a floating label
- Scripted SMP Essentials: NPCs, death ban, recording mode and more for scripted SMPs
- Complete Collection: all my published plugins in one purchase, 40% off
If this plugin helps your server, a short review on this page would mean a lot. Thank you!
Installation
Requirements
- Server software
- Paper, or a Paper fork such as Purpur. Spigot and CraftBukkit are not supported: the plugin uses Paper-only APIs.
- Minecraft version
- plugin.yml api-version 1.21; built against Paper API 1.21.11
- Java
- 21 or newer
- Required plugins
- none
- Optional plugins
PlaceholderAPI
Steps
- Download
Crates.jarfrom BuiltByBit. There is no licence key to enter. - Stop the server and put the jar into the
pluginsfolder. - Start the server. The plugin creates
plugins/Crates/config.ymlwith the defaults shown under Configuration. - Edit
config.ymlto suit your server. - Apply the changes with
/crate reload(Read crates.yml again), or restart the server.
Setup guide
- Drop Crates.jar into /plugins and restart.
- Run /crates, press manage, type a name and create the crate.
- Hold the item you want to give away, set a weight, and press add. Repeat for every reward.
- Hold the item you want to be the key and press use my item as the key.
- Look at the block that should be the crate and press bind. Give yourself a key and try it.
Commands
From plugin.yml. "Not set" in the permission column means plugin.yml attaches no permission to the command itself; the nodes the plugin checks are listed under Permissions.
| Command | Aliases | Usage | Description | Permission |
|---|---|---|---|---|
/crates | none | /crates | Your crates and your keys. | not set |
/crate | none | /crate preview|keys|key|givevirtual|giveall|set|list|reload | Crate admin and key giving. | not set |
Subcommands in detail
/crates Your crates and keys.
/crate preview <crate> What is inside and what it costs.
/crate keys How many keys you hold of each crate.
/crate key <crate> <player> [n] (admin) Give physical keys.
/crate givevirtual <crate> <p> [n] (admin) Give keys to an account, even offline.
/crate set <crate> (admin) Bind the block you are looking at.
/crate list Every crate id.
/crate reload (admin) Read crates.yml again.
/crate giveall <crate> [amount] [virtual] (admin) Keys for everyone online (alias keyall).
Permissions
From plugin.yml.
| Node | Default | Description | Children |
|---|---|---|---|
crates.use | everyone | Open crates and see the screens. | none |
crates.admin | operators | Build crates, give keys (also /crate giveall), bind blocks, reload. | none |
Placeholders
Registered with PlaceholderAPI under the identifier crates (CratePlaceholders.java). PlaceholderAPI must be installed for these to work.
| Placeholder | Returns |
|---|---|
%crates_keys_<crate>% | keys held: in the inventory plus on the account |
%crates_virtual_<crate>% | keys on the account only (also for offline players) |
%crates_physical_<crate>% | key items in the inventory only |
%crates_name_<crate>% | the crate's display name |
%crates_rewards_<crate>% | how many rewards the crate holds |
%crates_total_keys% | every key the player holds, all crates together |
%crates_count% | how many crates the server has |
Configuration reference
The default files as they ship in the jar, with their comments. The plugin writes them to plugins/Crates/ on first start.
config.yml
Top-level keys:
| Key | Default | Comment above it |
|---|---|---|
key-lore | ['<gray>Right-click a {crate} crate to open it.</gray>'] | The lore put on a key that has none of its own. {crate} is the crate's name. |
default-hologram | list of 3 | The floating label put over a new crate. {crate} is the crate's name. |
mass-open-max | 10 | Mass open: the preview screen offers "Open N at once" to a player with at least two keys on their account (virtual keys). It skips the animation and sends one summary line. This is the most it opens in one click; 0 or 1 hides the button. |
theme | section, 11 keys | Every message below is written against these names, not against hex codes: <accent>Open</accent> rather than <#f2c14e>Open</#f2c14e>. Change a colour here and it changes on every screen at once. Ordinary MiniMessage still works, so <gradient:#a:#b> and... |
messages | section, 101 keys | none |
review-reminder | true | One thank-you line with the BuiltByBit review link: once in the console after install and once in chat for the first operator who joins. It never repeats and sends nothing anywhere. false turns it off. |
# Crates - keys, a draw you can watch, and honest chances.
#
# A crate is a block you bind, a key item, and a list of rewards with weights. The opening happens
# in the world on item displays, not in a chest menu, and the preview screen shows every reward with
# its real percentage before anybody spends a key.
#
# Crates themselves live in crates.yml, which the plugin writes; build them in game with /crates.
# The lore put on a key that has none of its own. {crate} is the crate's name.
key-lore:
- "<gray>Right-click a {crate} crate to open it.</gray>"
# The floating label put over a new crate. {crate} is the crate's name.
default-hologram:
- "<#f2c14e><bold>{crate}</bold></#f2c14e>"
- "<gray>right-click with a key</gray>"
- "<dark_gray>left-click to look inside</dark_gray>"
# Mass open: the preview screen offers "Open N at once" to a player with at least two keys on their
# account (virtual keys). It skips the animation and sends one summary line. This is the most it
# opens in one click; 0 or 1 hides the button.
mass-open-max: 10
# ------------------------------------------------------------------------------------------------
# THEME
# ------------------------------------------------------------------------------------------------
# Every message below is written against these names, not against hex codes: <accent>Open</accent>
# rather than <#f2c14e>Open</#f2c14e>. Change a colour here and it changes on every screen at
# once. Ordinary MiniMessage still works, so <gradient:#a:#b> and <#ff0000> are fine anywhere.
theme:
accent: "#f2c14e" # your colour: headings and anything the player is meant to click
accent2: "#f8dd9e" # a lighter accent, for a second level of emphasis
title: "#f4f7ff" # screen titles
text: "#c2ccdd" # ordinary prose
muted: "#6b7a94" # hints, separators, anything the eye should skip
value: "#ffffff" # the numbers and names the player opened the screen to read
good: "#57e08a"
warn: "#ffc857"
bad: "#ff6b6b"
small-caps: false # ᴇхᴀᴍᴘʟᴇ - a garnish; whole menus in it read badly
# Real Minecraft item pictures beside the buttons and in the chest screens. Drawn from the
# client's own textures, so there is nothing to install and no resource pack: it needs a
# 1.21.9 or newer client, and older ones simply see the buttons as words.
item-icons: true
messages:
prefix: "<accent><bold>Crates</bold></accent> <muted>»</muted> "
no-permission: "<bad>You cannot do that.</bad>"
players-only: "<text>Players only.</text>"
unknown: "<bad>No crate called </bad><value>{crate}</value>"
unknown-player: "<bad>Unknown player: </bad><value>{name}</value>"
bad-name: "<bad>Names: letters, numbers, - and _, up to 24 characters.</bad>"
exists: "<bad>There is already a crate called </bad><value>{crate}</value>"
hold-something: "<text>Hold the item first.</text>"
look-at-block: "<text>Look at the block you want to be the crate.</text>"
help: "<text>/crates · /crate preview <crate> · /crate keys · /crate key <crate> <player> [n] · /crate givevirtual <crate> <player> [n] · /crate giveall <crate> [n] [virtual] · /crate set <crate> · /crate reload</text>"
usage-preview: "<text>/crate preview <crate></text>"
usage-key: "<text>/crate key <crate> <player> [amount]</text>"
usage-virtual: "<text>/crate givevirtual <crate> <player> [amount]</text>"
usage-set: "<text>/crate set <crate> (looking at the block)</text>"
# /crate giveall: a key-all for everyone online. "virtual" puts the keys on their accounts.
usage-giveall: "<text>/crate giveall <crate> [amount] [virtual]</text>"
giveall-done: "<text>Gave </text><value>{amount}</value><text> {crate} key(s) to </text><value>{count}</value><text> online player(s).</text>"
list: "<text>Crates: </text><value>{list}</value>"
reloaded: "<value>Reloaded {count} crate(s).</value>"
key-name: "<accent>{crate} Key</accent>"
key-given: "<text>Gave </text><value>{amount}</value><text> {crate} key(s) to </text><value>{player}</value><text>.</text>"
key-received: "<text>You got </text><value>{amount}</value><text> {crate} key(s).</text>"
virtual-given: "<text>Put </text><value>{amount}</value><text> {crate} key(s) on </text><value>{player}</value><text>'s account.</text>"
virtual-received: "<text>You have </text><value>{amount}</value><text> more {crate} key(s). </text><value>/crates</value>"
keys-row: "<value>{crate}</value><text>: {keys} key(s)</text>"
need-key: "<text>You need a </text><value>{crate}</value><text> key.</text>"
no-virtual-key: "<text>No {crate} keys on your account.</text>"
already-opening: "<text>One at a time.</text>"
crate-empty: "<text>{crate} has nothing in it yet.</text>"
opening: "<value>Opening {crate}...</value>"
won: "<text>You won </text>{reward}<text> from {crate}.</text>"
# A crate that finished while the player was offline (they logged out mid-opening, or the server stopped).
pending-given: "<text>Your </text><value>{crate}</value><text> opening finished while you were away. Here it is.</text>"
broadcast: "<value>{player}</value><text> won </text>{reward}<text> from </text><value>{crate}</value><text>.</text>"
block-added: "<text>That block is now a </text><value>{crate}</value><text> crate.</text>"
block-removed: "<text>That block is no longer a {crate} crate.</text>"
block-protected: "<text>That is a </text><value>{crate}</value><text> crate. Sneak and break it to unbind it.</text>"
# The screens. Every line here is a title, a button label or a tooltip.
menu-title: "<value>Crates</value>"
menu-close: "<white><icon:close></white><text>Close</text>"
menu-back: "<white><icon:back></white><text>Back</text>"
menu-back-tip: "<text>Back to the screen before.</text>"
menu-crate-line: "<value>{crate}</value><text> · {rewards} rewards · you hold {keys} key(s) · {places} place(s)</text>"
menu-crate-open: "{icon}<value>{crate}</value>"
menu-crate-open-tip: "<text>See what is inside and what it costs.</text>"
menu-no-crates: "<text>No crates yet.</text>"
menu-manage: "<white><icon:staff></white><text>Manage crates</text>"
menu-manage-tip: "<text>Admins: build and edit crates.</text>"
preview-title: "<value>{crate}</value>"
preview-head: "<text>Inside </text><value>{crate}</value><text>. You hold {keys} key(s).</text>"
preview-row: "{icon}<value>{reward}</value><text> · {chance}%</text> {rare}"
preview-rare: "<accent>rare</accent>"
preview-empty: "<text>Nothing in this crate yet.</text>"
# The reward tiles: the real item, with its odds under it.
preview-tile-name: "<accent><bold>{reward}</bold></accent>"
preview-tile-chance: "<text>Chance </text><value>{chance}%</value>"
preview-tile-rare: "<warn>Announced to the server</warn>"
preview-tile-common: "<muted>Quietly yours</muted>"
# The crate rows on the list screen: the crate's own key is the icon.
row-crate: "<accent><bold>{crate}</bold></accent>"
row-crate-keys: "<good>{keys} key(s)</good><text> · {rewards} rewards</text>"
row-crate-nokeys: "<muted>No keys</muted><text> · {rewards} rewards</text>"
preview-where: "<muted>Standing in {count} place(s) in the world.</muted>"
preview-open-virtual: "<white><icon:crate></white><good>Open one now ({keys} left)</good>"
preview-open-virtual-tip: "<text>Uses a key from your account, wherever you are.</text>"
# Mass open (see mass-open-max). {rewards} is the list of what came out.
preview-open-many: "<white><icon:crate></white><good>Open {count} at once</good>"
preview-open-many-tip: "<text>Uses {count} keys from your account and skips the animation.</text>"
mass-opened: "<text>Opened </text><value>{count}</value><text> {crate} crate(s): </text>{rewards}"
mass-reward-times: "{reward}<muted> x{times}</muted>"
mass-reward-separator: "<muted>, </muted>"
admin-title: "<value>Manage crates</value>"
admin-empty: "<text>No crates yet. Type a name below and create one.</text>"
admin-line: "<value>{crate}</value><text> ({id}) · {rewards} rewards · {places} place(s) · {animation}</text>"
admin-open: "{icon}<value>Edit {crate}</value>"
admin-open-tip: "<text>Edit this crate.</text>"
admin-field-id: "<text>Name of the new crate</text>"
admin-create: "<white><icon:yes></white><good>Create it</good>"
admin-create-tip: "<text>Makes an empty crate with that name.</text>"
edit-title: "<value>{crate}</value>"
edit-head: "<text>{crate} ({id}) · {animation} · {places} place(s) · key: {key}</text>"
edit-default-key: "tripwire hook"
edit-reward: "<value>{reward}</value><text> · weight {weight} = {chance}% · {what}</text>"
edit-no-rewards: "<text>No rewards yet. Hold an item and press add.</text>"
edit-field-name: "<text>Name players see</text>"
edit-field-weight: "<text>Weight for the reward</text>"
edit-field-reward: "<text>Which reward</text>"
edit-add-held: "<white><icon:yes></white><good>Add what I am holding</good>"
edit-add-held-tip: "<text>The item in your hand becomes a reward with the weight above.</text>"
edit-remove: "<white><icon:delete></white><bad>Remove the chosen reward</bad>"
edit-remove-tip: "<text>Deletes the reward you picked.</text>"
edit-weight: "<white><icon:weight></white><value>Set its weight</value>"
edit-weight-tip: "<text>Writes the weight above onto the reward you picked.</text>"
edit-rare: "<white><icon:arrange></white><value>Announce it or not</value>"
edit-rare-tip: "<text>Whether the whole server hears when somebody wins it.</text>"
edit-rename: "<white><icon:rename></white><value>Rename the crate</value>"
edit-rename-tip: "<text>Uses the name field above.</text>"
edit-key-held: "<white><icon:crate></white><value>Use my item as the key</value>"
edit-key-held-tip: "<text>The item in your hand becomes this crate's key.</text>"
edit-key-give: "<white><icon:crate></white><value>Give me one key</value>"
edit-key-give-tip: "<text>For testing the crate you are building.</text>"
edit-bind: "<white><icon:bind></white><value>Bind the block I am looking at</value>"
edit-bind-tip: "<text>That block becomes a crate players can right-click.</text>"
edit-animation: "<white><icon:fire></white><value>Animation: {animation}</value>"
edit-animation-tip: "<text>roulette, orbit, or instant.</text>"
edit-delete: "<white><icon:delete></white><bad>Delete this crate</bad>"
edit-delete-tip: "<text>Removes the crate and its rewards.</text>"
# One thank-you line with the BuiltByBit review link: once in the console after install and once
# in chat for the first operator who joins. It never repeats and sends nothing anywhere. false turns it off.
review-reminder: trueConfig guide
The annotated summary from the store page. Where it and the default file above differ, the file is what the plugin ships.
key-lore: ["<gray>Right-click a {crate} crate to open it.</gray>"]
default-hologram:
- "<#f2c14e><bold>{crate}</bold></#f2c14e>"
- "<gray>right-click with a key</gray>"
crates.yml, written by the plugin as you build:
vote:
display: "Vote"
animation: roulette roulette, orbit, instant
animation-ticks: 60
key: <the item you chose>
blocks: ["world,120,64,-30"]
rewards:
r1:
display: "16x Diamond"
weight: 10 weights, not percentages
item: <the item you held>
commands: []
broadcast: false
FAQ
Which servers and versions does it run on?
It needs Paper or a Paper fork such as Purpur, because it uses Paper-only APIs (the dialog API for its menus, Adventure text components). Spigot and CraftBukkit are not supported. plugin.yml declares api-version 1.21, the jar is built against Paper API 1.21.11, and it needs Java 21 or newer.
Does it need other plugins?
No other plugin is required (plugin.yml has no hard dependencies). Optional: PlaceholderAPI (plugin.yml softdepend), used when present.
How do I apply config changes?
Edit plugins/Crates/config.yml and run /crate reload (read crates.yml again). A restart works too.
Does it run on Folia, or for Bedrock players?
Not tested on Folia, and plugin.yml does not declare folia-supported. Bedrock players (through Geyser) have not been tested either.
What licence do I get?
The licence terms are the BuiltByBit EULA shown on the listing. There is no licence key to enter, and the plugin never contacts a licence server.
Links
- BuiltByBit: Crates
- Support Discord: discord.gg/KG4ubAZEuw
- All plugins on BuiltByBit: the collection
- More plugins: all plugins
- Custom work: commissions
Support
Questions, bugs or ideas: the active support Discord or the discussion tab on this page. When something breaks, include your server version and the error from the console.
Full setup guide, commands, permissions and config reference: documentation.